好的我遇到了我试图根据搜索字符串插入一行的情况。我很熟悉使用一件作品或简单的东西来做AWK和SED。
我想如何插入包含单引号和括号的字符串 例如 这将有效
awk '/('Backup/ {print "NEWLINE" } {print}' filename.sh
这样
sed -e '/\(\'backup/i\
newline ' filename.sh
而不是换行工作 - 我想要这个“('删掉不好的white.cap;'),”
“and”
中包含的所有内容答案 0 :(得分:2)
您尝试做的事与awk
或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
说明:
使用shell for
循环遍历目录中的所有文件。使用BEGIN
块为文件添加标头。找到单词backup
并打印包含shell变量DB
和TB
的行。 ... }1'
脚本末尾的awk
默认启用打印。它是{ print }
的简写。 HTH。
答案 1 :(得分:1)
使用awk的另一种方式:
将您的内容插入单独的文件中:
$ cat file1
" ('Drop the no good white.cap ;' ) , "
使用awk:
$ awk '/\('\''Backup/{getline x<"file1";print x;}1' filename.sh
使用getline,file1中的行被读入变量x,并打印出一个模式。这将允许您不使用任何转义字符来逃避引号。