使用awk或send来查找字符串并在其之前插入另一个复杂的字符串

时间:2012-12-04 05:31:14

标签: string search insert sed awk

好的我遇到了我试图根据搜索字符串插入一行的情况。我很熟悉使用一件作品或简单的东西来做AWK和SED。

我想如何插入包含单引号和括号的字符串 例如 这将有效

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

这样

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

而不是换行工作 - 我想要这个“('删掉不好的white.cap;'),”

“and”

中包含的所有内容

2 个答案:

答案 0 :(得分:2)

您尝试做的事与awksed无关。例如,请参阅:

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变量DBTB的行。 ... }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,并打印出一个模式。这将允许您不使用任何转义字符来逃避引号。