sed -i 's/原内容/新内容/g' 文件 #!!!注意这里 g 是全文替换 !!!注意这个参数并没有实际修改文件的内容 sed 's/d01.txt/dd0011.txt/' d01.txt #对流的修改,没有真实修改文件内容 sed -i 's/d01.txt/dd0011.txt/' d01.txt # 真实修改文件内容
选项 n 仅显示script处理后的结果 , p 打印模板块的行 sed -n 's/d01.txt/dd0011.txt/p' d01.txt #打印发生修改的行,没有真实修改文件
sed 's/d01.txt/dd0011.txt/' d01.txt > d01.txt.tmp #保存为临时文件 mv d01.txt.tmp d01.txt #确认临时文件修改内容争取后替换原文件
定界符
以上命令字符串中使用 / 在 sed 中作为定界符使用,也可以使用任意的定界符
1 2 3 4 5 6 7
sed 's:d01.txt:dd0011.txt:' d01.txt #对流的修改,没有真实修改文件内容
在对文本中含有特殊字符的时候可以考虑使用其他定界符,比如,原内容或者新内容中包含("/""#") sed -i's:原内容:新内容:g' 文件名字 sed 's:d01.txt:dd0011.txt:' d01.txt sed -i's,原内容,新内容,g' 文件名字 sed 's,d01.txt,dd0011.txt,' d01.txt sed -i's#原内容#新内容#g' 文件名字 sed 's#d01.txt#dd0011.txt#' d01.txt sed -i's~原内容~新内容~g' 文件名字 sed 's~d01.txt~dd0011.txt~' d01.txt
命令 d 删除操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
删除空白行 sed '/^$/d' d01.txt [ 对流的删除 ] sed -i'/^$/d' d01.txt [ 真实删除空白行后,保存 ]
删除文件的第2行 sed '2d' d01.txt
删除文件的第2行到末尾所有行: sed '2,$d' d01.txt
删除文件的最后一行 sed '$d' d01.txt
删除文件中所有开头是 hello 的行 sed '/^hello/d' d01.txt
已匹配字符串标记 & ,注意这个符号
1 2 3 4 5 6 7 8
正则表达式 \w\+ 匹配每一个单词,使用 [&] 替换它,& 对应于之前所匹配到的单词 sed 's/\w\+/[&]/g' d01.txt [ 使用 & 替换] sed 's/\w\+/[]/g' d01.txt [ 空白 ]
sed -i's/\w\+/[&]/g' d01.txt [真是替换,并保存]
所有以 hello 开头的行都会被替换成他自己加 hi sed 's/^hello/&hi/' d01.txt
字符串匹配标记 \1
1 2 3 4 5
echo thisis digit 6in a number | sed 's/digit \([0-9]\)/\1/' echo thisis digit 6in a number | sed 's/digit \([0-9]\)/\1test/'
echo thisis test 6 | sed 's/test \([0-9]\)/\1/' echo thisis test 6 | sed 's/test \([0-9]\)/\1test/'