好吧,我陷入了尝试根据搜索字符串插入一行的情况。我很熟悉使用 AWK 和 SED 使用单个工作或不复杂的东西来完成此操作。
我想如何插入包含单引号和括号的字符串 例如 这会起作用
awk '/('Backup/ {print "NEWLINE" } {print}' filename.sh
这也是如此
sed -e '/\(\'backup/i\
newline ' filename.sh
而不是换行工作 - 我想要这个“('删除不好的white.cap;'),”
“和”内包含的所有内容
最佳答案
您尝试执行的操作与 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
block 向文件添加 header 。找到单词 backup
并打印包含 shell 变量 DB
和 TB
的行。 ... }1'
位于 awk
脚本末尾,默认启用打印。它是 { print }
的简写。 HTH。
关于string - 使用 awk 或 send 查找字符串并在其前面插入另一个复杂字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13696674/