我在做
sed "s/test1/replacetext" testfile.txt
我尝试使用 /q 来查找“test1”并执行 shell 脚本失败。我怎样才能做到这一点?谢谢内特
答案1
使用 GNUsed
和多行输入:
sed -n '/pattern/{h;s//replacement/;};p;${g;//!q1;}' file
- 在包含以下内容的行上
pattern
:- 将行添加到保持缓冲区
- 执行替换
- 打印每一行
$
当到达 最后一行 ( ) 时:- 获取保持缓冲区
- 如果模式空间不包含
pattern
,则使用退出代码退出1
- 空正则表达式
//
使用上次使用的正则表达式模式
选择 - awk
:
awk 'END{exit !repl} /pattern/{repl++; sub(/pattern/,"replacement")} 1' file
- 如果一行包含
pattern
,则变量repl
会递增并进行替换 - 最后,以
logical not
变量的 退出(如果repl
为零,以 status 退出1
)
替代方案 –grep
预先输入,例如:
if grep -q 'pattern' file; then
# input contains pattern - do sed replacement
sed 's/pattern/replacement/' file
else
: input does not contain pattern - execute shell script
fi