S2-P2 sed命令的使用
约 955 字大约 3 分钟
2025-03-03
任务一:打印
创建带有行号的
mypasswd
文件cat -n /etc/passwd > mypasswd
sed命令分别打印
mypasswd
文件的第5到8行,第5到末行,包含lib字段的行打印 第5到8行
sed -n '5,8p' mypasswd
解析:
-n
选项:不输出默认内容,只显示对数据操作的数据5,8
地址:逗号隔开表示范围,比如2,5
表示第2到第5行p
脚本命令:打印mypasswd
目标文件打印 第5到末行
sed -n '5,$p' mypasswd
解析:
$
地址:表示末行,比如2,$
表示从第2行到末行错误示范说明:
sed -n "5,$p" mypasswd
这个命令的目标是从文件 mypasswd 中打印第5行到最后一行的内容。然而,根据错误提示,问题可能出现在双引号的使用上。尽管在很多情况下使用双引号是可以的,但在某些环境中,可能会因为转义字符等问题导致解析错误。解决这个问题:
使用单引号:通常,为了避免与shell解释发生冲突,最好使用单引号来包围
sed
的脚本表达式。请尝试将您的命令改为使用单引号:sed -n '5,$p' mypasswd
打印 包含lib字段的行
sed -n '/lib/p' mypasswd
解析:
/lib/
地址:查询包含模式的行。比如/lisi/
,查询包含lisi
的行
任务二:删除
sed命令删除
mypasswd
文件5行sed '5d' mypasswd
解析:
d
命令:删除sed命令删除
mypasswd
文件15行到20行sed '15,20d' mypasswd
任务三:插入
sed命令分别在 mypasswd
文件的10行前后各插入一行 test line
sed -e '10i\test line' -e '10a\test line' mypasswd
解析:
-e
选项:可以使用多个命令(脚本)进行操作
i
命令:行前添加
a
命令:行后添加

任务四:替换
sed
命令将mypasswd
文件的10行中的root
字段替换为lisi
sed -n '10s/root/lisi/gp' mypasswd
解析:
s
命令:字符串替换root
被替换的字符串lisi
替换成的字符串g
命令:全局匹配sed
命令将全文中的sbin
字段替换为myshell
sed -n 's/sbin/myshell/gp' mypasswd
解析:
当地址缺省时为全局
任务五:写入
sed命令先将mypasswd文件的1-10行删除后,再将全文的bin字段替换为myshell,并将结果存为mypasswd2文件
sed -e '1,10d' -e 's/bin/myshell/gw mypasswd2' mypasswd
解析:
w
命令:将文本中指定行的内容写入文件中
mypasswd2
输出到的文件名
拓展1:文件合并
采用两种方法将 /etc/passwd
和 /etc/fstab
两个文件合并成一个名为 combine.conf
的文件,保持到家目录下
方法一:sed
sed '$r /etc/fstab' /etc/passwd > ~/combine.conf
方法二:cat
cat /etc/passwd /etc/fstab > combine.conf
拓展2
将 /etc/passwd
文件中包含sbin字段的行都找出来,并从第1行开始,每隔5行的行后插入一句 this is a system warning
, 将内容保存到家目录下的 pd.txt
文件中
# 方法一
sed -n '/sbin/p' /etc/passwd > temp.txt
sed '1~5a\this is system warning' temp.txt > pd.txt
# 方法二
grep "sbin" /etc/passwd | sed -e '1~5a\this is system warning' > pd.txt
# 方法三
sed -n -e '/sbin/p' -e '1~5a\this is system warning' /etc/passwd > pd.txt
版权所有
版权归属:DDoS_LING