2

好的,我被锁定在我试图根据搜索字符串插入一行的情况下。我熟悉使用单个工作或不复杂的东西来使用 AWK 和 SED。

我想如何插入一个包含单引号和括号的字符串,例如这将起作用

     awk '/('Backup/ {print "NEWLINE"  } {print}' filename.sh 

这也会

    sed -e '/\(\'backup/i\
    newline ' filename.sh

而不是换行工作 - 我想要这个“('Drop the no good white.cap;'),”

包含在“和”中的所有内容

4

2 回答 2

2

您尝试做的事情与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 变量DBTB. ... }1'awk脚本末尾默认启用打印。它是 的简写{ print }。HTH。

于 2012-12-04T05:38:22.353 回答
1

使用 awk 的另一种方法:

将要插入的内容保留在单独的文件中:

$ cat file1
 " ('Drop the no good white.cap ;' ) , "

使用 awk:

$ awk '/\('\''Backup/{getline x<"file1";print x;}1'  filename.sh

使用 getline,file1 中的行被读入变量 x,并打印在 encoutering 模式中。这将允许您不使用任何转义字符来转义引号。

于 2012-12-04T05:47:25.663 回答