grep命令:查找文件里符合条件的字符串

grep怎么带文件名查找

一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来

语法格式: grep [options]

-i:ignore-case 忽略大小写差别

-c:count 只打印匹配的总行数,不显示匹配的内容信息

-n:line-number 在匹配的行前面打印行号

-v:revert-match 反检索,只显示不匹配的行

-r:recursion递归地,读取每个文件夹下的所有档案

-l :不显示平常一般的输出结果,只显示符合的文件名称

# Recursively grep for string <pattern> in folder: 搜索文件夹内的文本

grep -R pattern folder

10.1 Linux 批量操作

10.1.1 修改项目下的所有文件内的变量名、变量值

1. 批量查找某个目录下文件的包含的内容,例如:

grep -rn "要找查找的文本" ./

2.批量查找并替换当前文件夹下的文件内容:

-e : 可以在同一行里执行多条命令

不加 -e 只有 's/11/00/g' 进行了操作




linux grep 多个目录 linux grep 文件夹_linux grep 多个目录


加上 -e 时 's/11/00/g' 与 's/22/99/g' 都进行了操作


linux grep 多个目录 linux grep 文件夹_sed_02


sed -i "s/要找查找的文本/替换后的文本/g" `grep -rl "要找查找的文本" ./`

-i 表示inplace edit,就地修改文件

-r 表示搜索子目录

-l 表示输出匹配的文件名

sed -i "s/50/53/g" 1p2S.xml

3.批量查找并替换任意文件夹下的文件内容。

sed -i "s/要找查找的文本/替换后的文本/g" `grep -rl "要找查找的文本" /任意文件夹`

使用时注意空格的存在!

这个命令组合很强大,要注意备份文件

10.1.2 批量查找含有某字符串的文件名

find . -type f -name "*.html"|xargs grep ‘yourstring’

10.1.3 批量修改文件夹权限

find . -type -d -name *.html|xargs chmod 755

10.1.4 批量修改文件权限

find . -type -f -name *.html|xargs chmod 644

批量替换文本下具有同一特征的变量/数字

批量替换文件夹下文件里的同一变量

我认为题主首先需要定义什么叫"变量名", 比如你能否提供一个正则表达式来匹配所有的"变量名".
否则题主只能手动识每个变量名, 然后去手动做批量替换, 我猜测这可能不是题主想要的结果.
当然, 替换文本这项工作是可以自动化的, 用sed命令或者vim其实也可以.

我自己试验了下, 这个简单的脚本应该可以把所有c文件里的0替换成0文件名.
如果你能有一个pattern去匹配所有的"变量名", 那么用这个pattern换掉0就可以了.

for f in *.c

do

sed -i -e '1,$s/0/'0$f'/g' "$f"

done

linux shell递归修改文件夹内的所有文件名

linux 压缩解压缩 decompress 分割压缩文件

2、压缩后的文件太大,需要将andywang.tar.gz分割成N个指定大小的文件

split -b 4000M -d -a 1 andywang.tar.gz andywang.tar.gz.

cat andywang.tar.gz | split -b 4000M -d -a 1 andywang.tar.gz.

//使用split命令,-b 4000M 表示设置每个分割包的大小,单位还是可以k

// -d "参数指定生成的分割包后缀为数字的形式

//-a x来设定序列的长度(默认值是2),这里设定序列的长度为1

tar -czf - proc | split -b 2m -d - proc.tar.gz #分卷压缩proc目录,并保持每个压缩包的大小不超过2m字节。命令执行后,会生成proc.tar.gz00、proc.tar.gz01等文件

cat proc.tar.gz* | tar -xzf - #将各个分卷压缩包解压到当前目录

cat proc.tar.gz* > proc.tar.gz #将各个分卷压缩包合成为一个proc.tar.gz文件

附录:split命令的使用

split proc.tar.gz -b 2m #将proc.tar.gz文件分割为多个小文件,并保持每个小文件的大小不超过2m字节。命令运行后,源文件依然存在。生成的小文件以默认格式命名,为:xaa、xab等

split proc.tar.gz -b 2m -d #基本同上,只是生成的小文件以数字格式命名,为:x00、x01等

split proc.tar.gz -b 2m -d proc.tar.gz

split a.txt -C 300k -d a.txt #将a.txt文本文件分割为多个小文件,并保持每个小文件的大小不超过300k字节,而且尽量保持每行的完整性

tar.gz分卷压缩包windows下如何合并

这是linux的压缩文件,winrar无法直接解压缩,假设有如下几个tar.gz分卷:aaa.tar.gzaa、aaa.tar.gzab、aaa.tar.gzac,在Windows下如何进行合并呢?

进入cmd命令提示符界面,cd进入当前目录,输入如下:

copy /b aaa.tar.gza* aaa.tar.gz

然后直接解压缩当前目录下的aaa.tar.gz即可

解压各种不同类型的文件

Tips:

首先用 file *.tar.gz 命令查看,要解压文件的文件类型

如果文件是POSIX tar archive (GNU) 文件,就可以调用 tar xvf解压

如果是是gzip compressed data 可以先用tar xvzf解压,如果还是不能解压,还可以试试用 gzip –d *.tar.gz解压

de/compress tar

解压zip格式

unzip ....zip

cvf 记忆: c -> compressed 是压缩

xvf 是解压 (二部机器上不能接呀 zip)

不单独使用c或f 实验发现没有效果,程序不会停止

-c Create a new archive containing the specified items.

-x Extract

-v Produ

ce verbose(冗长的) output. In create and extract modes, tar will

list each file name as it is read from or written to the archive.

In list mode, tar will produce output similar to that of ls(1).

Additional -v options will provide additional detail.

-f 略

tar压缩多个文件夹

tar -cvf a.tar/zip b c d 注意顺序!!! 压缩文件写在前面!!!

我可以透过 tar -ztvf 来查 阅 tarfile 内的文件名称.

将A解压到B中

cd B

tar -xzvf A

zxfv的顺序可以颠倒

仅将A中的C解压到B中

cd B

tar -xzvf C B

《tar命令的详细解释》

tar调用gzip

  gzip是GNU组织开发的一个压缩程序,.gz结尾的文件就是gzip压缩的结果。与gzip相对的解压程序是gunzip。tar中使用-z这个参数来调用gzip。下面来举例说明一下:

  # tar -czf all.tar.gz *.jpg

  这条命令是将所有.jpg的文件打成一个tar包,并且将其用gzip压缩,生成一个gzip压缩过的包,包名为all.tar.gz

  # tar -xzf all.tar.gz

  这条命令是将上面产生的包解开。

linux 查看文件信息 查看进程 查看系统资源 查看CPU 查看内存 使用情况

文件(夹)信息

ls 只会显示文件夹本身的大小,不会显示其中所有文件大小的总和

ls -d */ #list directories in the current directory.

$ ls -lX 按照扩展名排序

$ ls -lt 按修改时间排序

$ ls -R 递归列出子目录

du 查看目录或文件所占用磁盘空间的大小。

查看文件夹A的大小:du -sh A

df -h 查看各磁盘剩余空间

进程信息

按内存资源使用量对进程进行排序

按CPU资源的使用量对进程进行排序

查看进程

文件(夹)信息

树形查看 : yum install tree 安装 tree命令

-h 以人类(human)易读的方式显示

ll

ls

ls -d */ #list directories in the current directory.

ls -d .*/ */ #列出目录 包括隐藏目录

$ ls -lX 按照扩展名排序

$ ls -lX

$ ls --sort=extension

$ ls -lt 按修改时间排序

$ ls -R 递归列出子目录

du 查看目录或文件所占用磁盘空间的大小。

查看文件夹A的大小:du -sh A

需求:查看当前目录下每个文件夹的【“总”】大小,对于每个文件夹不递归展开子文件夹

complelely correct way: du -h --max-depth=1

wrong: du -sh --max-depth=1

90% correct way:

du -sh */ #. defect: file or dir which begins with . will be ignored

 -s:显示目录占用的磁盘空间大小,不要显示其下子目录和文件占用的磁盘空间大小

du #不建议使用

du -sh #显示pwd占用的磁盘大小

du -sh 文件名或文件夹名

df -h 查看各磁盘剩余空间

Filesystem Size Used Avail Use% Mounted on

/dev/mapper/vg_myheart2-lv_root

50G 41G 6.4G 87% /

tmpfs 32G 4.0K 32G 1% /dev/shm

/dev/sda1 477M 63M 389M 14% /boot

/dev/mapper/vg_myheart2-lv_home

470G 385G 62G 87% /home

/dev/sdb1 551G 379G 144G 73% /mnt/sdb1

cm_processes 32G 440K 32G 1% /var/run/cloudera-scm-agent/process

进程信息

[root@maobo]# ps –ef    #查看系统进程 :

ps -ef 显示出的结果:

1.UID 用户ID

2.PID 进程ID

3.PPID 父进程ID

4.C CPU占用率

5.STIME 开始时间

6.TTY 开始此进程的TTY----终端设备

7.TIME 此进程运行的总时间

8.CMD 命令名

注意:往往需要杀死 PPID才能彻底杀死一个进程, 只杀死PID,杀死后进程可能又会重新出现

ps [选项]

下面对命令选项进行说明:

-e 显示所有进程。

-f 全格式。

-h 不显示标题。

-l 长格式。

-w 宽输出。

a 显示终端上的所有进程,包括其他用户的进程。

r 只显示正在运行的进程。

u  以用户为主的格式来显示程序状况。

x 显示所有程序,不以终端机来区分。

好用的:

ps -ef | grep 名称相关

-A 显示所有进程(等价于-e)(utility)

-a 显示一个终端的所有进程,除了会话引线 我的理解是:我现在开启的这个终端

所以: ps 与 ps -a 输出的信息很少

[root@myheart-8 home]# cheat ps

# To list every process on the system:

ps aux

运行 ps aux 的到如下信息:

ps aux

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

smmsp 3521 0.0 0.7 6556 1616 ? Ss 20:40 0:00 sendmail: Queue runner@01:00:00 f

root 3532 0.0 0.2 2428 452 ? Ss 20:40 0:00 gpm -m /dev/input/mice -t imps2

htt 3563 0.0 0.0 2956 196 ? Ss 20:41 0:00 /usr/sbin/htt -retryonerror 0

htt 3564 0.0 1.7 29460 3704 ? Sl 20:41 0:00 htt_server -nodaemon

root 3574 0.0 0.4 5236 992 ? Ss 20:41 0:00 crond

xfs 3617 0.0 1.3 13572 2804 ? Ss 20:41 0:00 xfs -droppriv -daemon

root 3627 0.0 0.2 3448 552 ? SNs 20:41 0:00 anacron -s

root 3636 0.0 0.1 2304 420 ? Ss 20:41 0:00 /usr/sbin/atd

dbus 3655 0.0 0.5 13840 1084 ? Ssl 20:41 0:00 dbus-daemon-1 --system

....................................

VSZ(虚拟内存大小)和RSS(常驻集大小):

VSZ表示如果一个程序完全驻留在内存的话需要占用多少内存空间;

RSS指明了当前实际占用了多少内存;

STAT显示了进程当前的状态:

"S":进程处在睡眠状态,表明这些进程在等待某些事件发生--可能是用户输入或者系统资源的可用性;

stat 中的参数意义如下:

D 不可中断 Uninterruptible(usually IO)

R 正在运行,或在队列中的进程

S 处于休眠状态

T 停止或被追踪

Z 僵尸进程

W 进入内存交换(从内核2.6开始无效)

X 死掉的进程

< 高优先级

n 低优先级

s 包含子进程

+ 位于后台的进程组

# To list a process tree

ps axjf

# To list every process owned by foouser:

ps -au foouser

# To list every process with a user-defined format:

ps -eo pid,user,command

# Exclude grep from your grepped output of ps.

# Add [] to the first letter. Ex: sshd -> [s]shd

ps aux | grep '[h]ttpd'

按内存资源使用量对进程进行排序

ps aux | sort -rnk 4;

按CPU资源的使用量对进程进行排序

ps aux | sort -nk 3

查看进程

[root@maobo]# uptime    #显示系统运行了多久,当前有几个用户登录