#将文件中的英文双引号替换成英文单引号
sed 's/"'"/'"'/g' test.txt
s/+双引号+单引号+双引号+/+单引号+双引号+单引号+/g
或者
sed s#\"#\'#g test.txt
#文件中存储数据的格式是key:value,现在交换变成value:key。
sed 's/\(.*\):\(.*\)/\2:\1/' input
#将文件中的所有大写字母转换成小写字母
sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/' input
#在文件中查找包含字符串pattern的行并打印,-n表示不打印输入文件的所有行,编辑命令p表示打印匹配行。
sed -n '/pattern/p' a.txt
#只打印第一行
sed -n '1p' a.txt
#打印第3~6行
sed -n '3,6p' a.txt
#将当前文件加下所有文件中的-m486替换成-mtune=i486
sed -i"s/-m486/-mtune=i486/g" `grep "\-m486" -rl .`
#在文件结尾添加文本
sed '$a\
End of file' input
#删除以.H1开头的行的下一行的空行,sedscript内容如下:
/^\.H1/{
n
/^$/d
}
sed -f sedscript input
#打印文件的前100行
sed '100q' input
#将文件中的多个空行变成一个
sed '/^$/{
N
/^\n$/D
}' input
#在文件中查找字符串,字符串可能跨两行
#!/bin/sh
#phrase -- search for words across lines
# $1 = search string; remaining args = filnames
search=$1
shift
for file
do
sed '
/'"$search"'/b
$!N
h
s/.*\n//
/'"$search"'/b
g
s/ *\n/ /
/'"$search"'/{
g
b
}
g
D' $file
done
注意使用变量的方式,变量两边用双引号,被Shell解释,然后再用单引号。
/'"$search"'/b在当前行匹配模式,如果匹配成功,b命令跳转到命令结尾,即输出当前行并进入下一个循环;
如果匹配失败,则执行$!N,即除了最后一行以外,读取下一行,追加到模式缓冲区中。
h将模式缓冲区中的内容拷贝到保持缓冲区中,
s/.*\n//将模式缓冲区中的第一行删除,然后/'"$search"'/b在剩下的内容,即原来的第二行中进行匹配,如果匹配成功,则直接输出并进入下一个循环;
如果匹配失败,向下执行,g将保持缓冲区内如拷贝到模式缓冲区,然后s/ *\n/ /将将第一行结尾的空格和换行符删除后,/'"$search"'/继续匹配,
如果匹配成功,g将保持缓冲区内如拷贝到模式缓冲区,b到命令结尾则输出模式缓冲区的内容后,进入下一个循环。
如果匹配失败,则g将保持缓冲区内如拷贝到模式缓冲区,然后用D删除模式缓冲区中的第一行,如果模式缓冲区中不为空,则从头开始执行。