您尝试做的事情与awk
or无关sed
。例如,请参阅:
print " '\'' data_between_two_single_quotes '\'' "
第一个'
字符关闭打开的'
shell 字符串文字。shell 文字不支持反斜杠转义。该序列'\''
起到了作用:它关闭单引号文字,指定引号字符(使用单引号文字之外支持的转义),然后重新打开一个新的单引号文字。你可以把它想象成一个四字符的转义序列来得到一个单引号。
因此,您的awk
命令变为:
awk '/\('\''Backup/ {print " ('\''Drop the no good white.cap ;'\'' ) , " } { print }' filename.sh
你的sed
命令变成:
sed -e '/\('\''Backup/i\
('\''Drop the no good white.cap ;'\'' ) , ' filename.sh
编辑:
for i in *; do awk -v database="$DB" -v table="$TB" 'BEGIN { print "header" } /backup/ { print " ('\''DROP TABLE " database "." table ";'\'' ) , " }1' "$i" > "${i}.new"; done
解释:
使用 shellfor
循环遍历目录中的所有文件。BEGIN
向带有块的文件添加标题。找到单词backup
并打印一行包含 shell 变量DB
和TB
. ... }1'
在awk
脚本末尾默认启用打印。它是 的简写{ print }
。HTH。