【问题标题】:Unix command line: how to add double quotes to a word?Unix命令行:如何为单词添加双引号?
【发布时间】:2014-09-28 05:05:44
【问题描述】:

我有一个文本文件“names.txt”,其中包含一个单词列表,如下所示:

Adidas
Android
Bluetooth
Minaret
Mushroom
acorn
airplane
amazon

我希望这个文件完全像:

"Adidas" = "";
"Android" = "";
"Bluetooth" = "";
"Minaret" = "";
"Mushroom" = "";
"acorn" = "";
"airplane" = "";
"amazon" = "";

知道如何做到这一点吗?谢谢你

【问题讨论】:

    标签: linux unix sed command


    【解决方案1】:

    这个 sed 怎么样?

    $ sed -e 's/^/"/' -e 's/$/" = "";/' file
    "Adidas" = "";
    "Android" = "";
    "Bluetooth" = "";
    "Minaret" = "";
    "Mushroom" = "";
    "acorn" = "";
    "airplane" = "";
    "amazon" = "";
    

    它将行首 (^) 替换为 ",将行尾 ($) 替换为 " = "";。所以它最终会在开头添加",在末尾添加" = "";

    使用sed -i.bak '...' 进行编辑。


    您也可以为此使用 bash:

    while read line
    do
        printf "%s%s%s\n" '"' $line '" = "";'
    done < file
    

    或 awk:

    awk '{printf "%s%s%s\n", "\"", $0, "\" = \"\";"}' file
    

    【讨论】:

    • 不需要printf,可以正常打印awk '{print "\""$0"\" = \"\";"}' file
    • 是的,我知道,谢谢,只是我更喜欢它的外观 {printf "%s%s%s\n", "\"", $0, "\" = \"\";"},因为它可以最好地控制要写入的前导和尾随字符串。
    【解决方案2】:

    使用这个sed 命令:

    sed 's/.*/"&" = "";/'
    

    要就地修改文件,您可以这样做:

    sed 's/.*/"&" = "";/' filename > tmp && mv tmp filename
    

    (选择一个不存在的临时文件名;我经常使用$$,当前shell的进程ID)或者:

    sed -i.bak 's/.*/"&" = "";/' filename
    

    后者将原始文件复制到filename.bak

    【讨论】:

    • +1 我喜欢.* 的技巧和你提供的解释。
    【解决方案3】:

    尴尬的方式

    awk '$0="\""$0"\" = \"\";"' file
    

    Sed方式

    sed 's/.*/"&" = "";/' file
    

    【讨论】:

      【解决方案4】:
      awk -v ORS='" = "";\n' '$1="\""$1'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 2010-11-10
        • 2020-07-25
        • 2016-07-26
        • 1970-01-01
        • 2019-10-29
        相关资源
        最近更新 更多