【问题标题】:using awk or send to find a string and insert another complex string , before it使用 awk 或 send 查找字符串并在其之前插入另一个复杂字符串
【发布时间】:2012-11-21 17:04:05
【问题描述】:

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

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

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

这个也可以

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

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

" 和 " 中包含的所有内容

【问题讨论】:

    标签: string search insert sed awk


    【解决方案1】:

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

    【讨论】:

    • awk '/BACKUP/{print " ('\''Drop the no good white.cap ;'\'' ) , " } { print }' filename.sh 似乎有效,但让说我里面有变量... awk '/BACKUP/{print " ('\''DROP TABLE $DB.$TB ;'\'' ) , " } { print }' filename.sh 我们如何扩展它们。非常感谢您的帮助
    • 很抱歉,上面的文章是扫罗的重复
    • 它给出了语法错误 awk:第 1 行附近的语法错误 awk:在第 1 行附近退出
    • 我认为你使用 awk -v database=$DB -v table=$TB '$0 ~ database , $0 ~ table' 文件名 但我不知道如何将逻辑与其他东西结合起来接下来
    • 嗨,史蒂夫,我没有看到编辑。你可以请重新发布.. 非常感谢
    【解决方案2】:

    另一种使用awk的方式:

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

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

    使用 awk:

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

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

    【讨论】:

    • 即使这个awk -v database="$DB" -v table="$TB" '/BACKUP/ {print " ('\''DROP TABLE " database "." table ";'\'' ) , " } { print }' filename.sh 给出同样的错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    • 2015-02-11
    相关资源
    最近更新 更多