yanbin's Blog
简单 Shell 编程 FAQ(〇)
0.sed 命令如何使用 shell 脚本某个变量的值?
使用 '“'括起表达式,或者即不用 '‘' 也不用 '“' 括起表达式。
'expression' 是使用 sed 时常用/常见的方式。
可以用 "expression" 的形式给 sed 指定表达式参数。
shell 对待参数的方式:
1)使用 '‘' 括起来的字符以它的文本形式对待。$ 就是 $ 这个字符,不会对待为展开变量的值;
2)使用 '“' 括起来的 '$ '用于展开变量的值,'\' 用来转义,其它字符仍然以文本形式对待;
3)执行命令时指定参数而不用'‘' 或'“' 括起来与使用 '“'类似;
# '$' 在这里用于匹配 '$'字符。 sed 's/A $foobar value/foobar/g' foobar.txt
# $ 展开 foobar 这个变量的值。转义的 \$ 匹配 '$'。 # 参数在传递给 sed 程序时已经完成变量值展开和转义了。 # 完成转义和变量展开的是 shell 而不是 sed. sed "s/A $foobar \$value/foobar/g" foobar.txt
# 这个与用 '“'括起来的效果是相同的。 sed s/A $foobar \$value/$/g foobar.txt
1.sed 如何从文件中直接删除一行或多行?
使用 sed 的 d 命令。
# 不熟悉 sed 时一般会写这样的代码。这种方式容易出错且耗费资源。 cat foobar.txt | sed 's/patter to match//gp' > tmp_file.txt mv tm_file.txt foobar.txt
# sed 的 d 命令 加 -i 参数 可以完成直接修改文件的操作。 sed -i '/pattern to match/d' foobar.txt
# 只输未匹配即没有被删除的行,而不修改文件 sed 'pattern to match/d' foobar.txt
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if SUFFIX supplied)
edit files in place (makes backup if SUFFIX supplied)
# -i 参数接受一个可选的 suffix, 指定这个 suffix, sed 会修改文件前备份文件 sed -i.bak '/pattern to match/d' foobar.txt