您尝试做的事情与awkor无关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。