Linux 四剑客

GREP

常见参数

' 匹配关键词
grep "root" /etc/passwd				# 从单个文件中查找指定字符串
grep "root" /etc/pass*				# 从多个文件中查找指定字符串

' 搜索时忽略大小写
grep -i "root" /etc/passwd

' 匹配整词
grep -w "root" /etc/passwd

' 显示不包含匹配文本的所有行
grep -v "root" /etc/passwd

' 递归搜索 不仅搜索当前目录 而且搜索子目录
grep -r "root" ./

' 列出所有匹配行,并显示行号
grep -n "root" /etc/passwd

' 只输出匹配行数量
grep -c "root" /etc/passwd

' 结合正则表达式匹配
grep -E "[1-9]" test.txt		# 显示文件中包含数字的行

实例

' 从单个文件中查找指定字符串
grep "root" /etc/passwd

' 从多个文件中查找指定字符串
grep "root" /etc/passwd /etc/shadow /etc/gshadow

' 输出文件中以root开头的行
grep ^root /etc/passwd 

' 输出文件中以bash结尾的行
grep bash$ /etc/passwd

' 输出文件中以root开头 bash结尾的行
grep "root.*bash" /etc/passwd

' 同时查找两个指定字符串
grep -e "wangj" -e "root" /etc/passwd

' 查找指定进程
ps -ef | grep zabbix

' 查找指定进程数量
ps -ef | grep -c zabbix

' 用 GREP_OPTIONS 使匹配项醒目
vim ~/.bashrc
export GREP_OPTIONS='--color=auto' GREP_COLOR='100;92'
source ~/.bashrc

SED

命令格式

sed [参数] "[定位][指令]"				' 注: 不指定定位 则默认处理全文 

参数

-e :允许多项编辑
-n : 取消默认输出
-i : 就地编辑文本
-r : 支持扩展正则表达式(sed中的正则表达式必须放在两个//中间)
-f : 指定定位规则的文件

定位

正则表达式

^	^word 搜索以word开头的内容

$	word$ 搜索以word结尾的内容

.	代表且只能代表任意一个字符(不匹配空行)

*	重复之前的字符或文本0个或多个,之前的文本或字符连续0次或多次

\	转义字符,让有特殊含义的字符脱掉马甲,现出原形,如\.只表示小数点

指令

p : 打印
d : 删除
a : 在当前行后添加一行或多行内容
c : 用新文件修改(替换)当前行中的文本
i : 在当前行之前插入文本
r : 从以外文件中读相关内容,写到相关行之后
w : 匹配到的行写入一个新的文件之中
y : 将字符转换成一个新的字符
s : 用一个字符替整体替换成另外一个字符
g : 全局执行
i : 与s指令配合一起使用时,则是忽略大小写的作用

参考

' 删除每行第一个字符
sed -r 's/^.//g' /etc/passwd

' 删掉每行第二个字符
sed -r 's/^(.)(.)/\1/g' /etc/passwd

' 删掉每行最后一个字符
sed -r 's/.$//g' /etc/passwd

' 取消一行的注释
cat cas.properties | sed '/Oracle10gDialect$/ s/^#//g'

' 给某行增加注释
cat cas.properties | sed -r '/MySQLDialect$/ s/^(.)/#\1/g'

' 在每行的最后增加文本
sed 's/$/& pass/g' cas.properties

' 只打印 1.txt 的第一行与第五行
sed -n -e "1p" -e "5p" 1.txt

' 删除 1.txt 的第三行
sed -i "3d" 1.txt 

' 删除 /etc/fstab 文件中所有注释行
sed -i -r "/^ *#|^$/d" /etc/fstab

' 删除文件 所有以#开头的行 
sed  -r "/^ *#/d" filename

' 删除文件 第一行至包含test行之间的全部内容
sed -r "1,/test/d" filename

' 删除文件 包含root行至第五行之间的全部内容
sed -r "/root/,5d" filename

'删除文件 包含root行至包含ftp行之间的全部内容
sed -r "/root/,/ftp/d" filename

' 在文件的第二行往后添加一行内容
sed "2a wangj" filename

' 替换某行内容
sed "3c WANGJ" filename 

' 在文件的第三行之前插入内容
sed "3i wangj" filename

' 将字符替换为一个新的字符
sed "s/sbin/1234/g" /etc/passwd				# g 全局执行
sed "s/ROOT/1234/i" /etc/passwd				# i 忽略大小写

' 将/etc/passwd文件信息输入至1.txt | 删除包含/sbin/nologin的行 | 查看 1.txt
cat /etc/passwd > 1.txt | sed -i -r "/\/sbin\/nologin/d" 1.txt | cat 1.txt

实战

# 将 IP 192.168.15.200 替换为 192.168.15.50
sed "s/\.200/\.50/g" /etc/sysconfig/network-scripts/ifcfg-eth

# 删除文件中的所有奇数行
sed "1~2d" filename

# 删除文件中的所有偶数行
sed "1~2! d" filename

# 在文件每一行行首增加 #号
sed  "s/^ */#/g" filename

# 在文件每一行行尾添加 .bak
sed -r "s/(.*)/\1\.bak/g" filename

# 将 Hello World 替换成 World Hello
sed -r "s/(Hello) (World)/\2 \1/g" filename

AWK

awk '{print $2}'

CUT

命令格式

cut [参数] [文件名]

参数

-c 以字符为单位进行分割

-d 指定分隔符

-f 指定输出区域

示例

' 以字符为单位进行分割 '

echo "hello world" | cut -c 4
l

echo "hello world" | cut -c 6


echo "hello world" | cut -c 7
w

echo "hello world" | cut -c 1-5
hello

echo "hello world" | cut -c 1,5
ho
' 随机生成8位数的密码 '
echo $RANDOM
21519

echo $RANDOM | md5sum
9ad02cdb5bc498597a5dbed7c0949909  -

echo $RANDOM | md5sum | cut -c 1-8
8bfb7d09
' 指定分隔符 '
cat /etc/passwd | cut -d ":" -f 1

cat /etc/passwd | cut -d "/" -f 5

Supongo que te gusta

Origin blog.csdn.net/weixin_45791800/article/details/121649250
Recomendado
Clasificación