sed 命令(2)

sed命令的使用
sed删除命令的使用:
sed '/My/,/You/d' datafile
#删除包含"My"的行到包含"You"的行之间的行
sed '/My/,10d' datafile (删除包含"My"的行到第十行的内容)
Sed ‘s/a//g’ datafile(删除包含a的内容)


sed添加操作:
sed '1a drink tea' pers (在第一行后面添加drink tea)
sed '1,3a drink tea' ab #第一行到第三行后增加字符串"drink tea"
sed '1a drink tea\nor coffee' ab   #第一行后增加多行,使用换行符\n
Sed -i ‘$a  bye’  ab(在最后一行添加bye)


Sed替换操作
sed '1c Hi' ab                #第一行代替为Hi
替换一行中的某部分
格式:sed 's/要替换的字符串/新的字符串/g'  (此处的/g表示全局替换)
sed -n '/ruby/p' ab | sed 's/ruby/bird/g'    #替换ruby为bird (先打印ruby这一行内容,然后将ruby替换成bird)
-n:只打印匹配的内容
-e是编辑命令,用于sed执行多个编辑任务的情况下
sed -e '1,10d' -e 's/My/Your/g' datafile
选项-e用于进行多重编辑。第一重编辑删除第1-3行。第二重编辑将出现的所有My替换为Your
/pattern/pattern/   查询包含两个模式的行,如/disk/disks/
/pattern/,x  在给定行号上查询包含模式的行,如/disk/,3
x,/pattern/  通过行号和模式查询匹配行,如 3,/disk/
x,y!    查询不包含指定行号x和y的行
打印行号:  sed -e '/music/=' temp.txt


Sed -i “1i abc” file(在第一行之前插入abc)
Sed -i “1a abc” file(在第一行之后插入abc)
sed -i "1c ABC" pers(把第一行替换成ABC)
sed '/^A/i\aaaaaaaaaaaa' pers(在匹配行之前加入一行)
sed '/^A/a\aaaaaaaaaaaaa' pers(在匹配行之后加入一行)
sed '/ABC/c\aaaaaaaaaaaaa' pers(用新的一行替换匹配ABC的行)
sed 's/ABC/abc/' pers(将ABC替换成abc,并输出到屏幕上)
sed -i 's/ABC/abc/' pers (修改的是源文件)
sed 'y/a/A/' pers(将a替换成A)
sed 'y/a b/A B/' pers(将a替换成A,将b替换成B)
sed -e 's/w1/& w2/g' file
G:代表替换所有,这里将文件中的所有w1替换成w1 w2


位置参数应用举例:
sed -e '/machine/s/phi/beta/g' file
将文件中含"machine"字串的资料行中的"phi"字串,替换成为"beta"字串
sed -e '1,10 s/w1/& w2/g' file
把1到10内的w1字符串替换成w1 w2字符串。
sed -e '1,/else/ s/w1/& w2/g' file
把1到字符串else内的w1字符串替换成w1 w2字符串

#代表删除从前往后最小匹配的内容
%代表删除从后往前最小匹配的内容


zcat:命令的使用

提取子串
${string:position}
在 string 中从位置$position 开始提取子串.
如果$string 为"*"或"@",那么将提取从位置$position 开始的位置参数,[1]
${string:position:length}
在 string 中从位置$position 开始提取$length 长度的子串.
子串替换
${string/substring/replacement}
使用$replacement 来替换第一个匹配的$substring.
${string//substring/replacement}
使用$replacement 来替换所有匹配的$substring.
${string/#substring/replacement}
如果$substring 匹配$string 的开头部分,那么就用$replacement 来替换$substring.
${string/%substring/replacement}
如果$substring 匹配$string 的结尾部分,那么就用$replacement 来替换$substring.
Bash 的第一个字符是从'0'开始记录的.
9 # Awk 的第一个字符是从'1'开始记录的.


Sed表达式可以用单引号来引用,但如果是表达式内部包含变量字符串,就需要使用双引号

posted @ 2025-02-10 16:40  山村放羊娃  阅读(35)  评论(0)    收藏  举报