【问题标题】:Surround all lines in a text file with quotes ('something')用引号('something')将文本文件中的所有行括起来
【发布时间】:2010-12-09 15:35:51
【问题描述】:

我有一个包含空格的目录列表。

我需要用 ' ' 将它们括起来以确保我的批处理脚本能够正常工作。

如何用 ' 和 ' (引号)包围每个新行。

例如

文件1:

/home/user/some type of file with spaces
/home/user/another type of file with spaces

文件2:

'/home/user/some type of file with spaces'
'/home/user/another type of file with spaces'

【问题讨论】:

  • 你需要在字符串中引用撇号吗?
  • 不只是围绕字符串。你知道 - 所以我的脚本在遇到带有空格的路径时不会失败。

标签: linux unix text directory grep


【解决方案1】:

使用 sed:

sed -i "s/^.*$/'&'/g" filename

【讨论】:

  • 对我不起作用 Adam - 根据特定的文件名会出现各种错误 - 可能需要 -e 吗?
  • 很确定我将它完全弹出到 cygwin 中,并且效果很好。不过可以制作一个类型。
【解决方案2】:

使用 sed?

sed -e "s/\(.*\)/'\1'/"

或者,如下所述,如果目录可能包含撇号(如果有的话,那就是噩梦)使用这个替代

sed -e "s/'/'\\\\''/g;s/\(.*\)/'\1'/"

【讨论】:

  • 命令运行良好 - 显然,如果有人在文件上使用它,则会在命令末尾附加它。
  • 如果文件名包含撇号怎么办?
  • 我会将其修改为 sed -e "s/'/'\\\\''/g;s/(.*)/'\1'/"
  • 在我的场景中,我想要双引号和逗号分隔 sed -e "s/(.*)/\"\1\",/"
  • 感谢您的回答,但讨厌...“-e”是多余的,因为只有一个脚本存在。
【解决方案3】:

您可以使用sed(1) 在文件中每一行的开头和结尾插入单引号,如下所示:

sed -i~ -e "s/^/'/;s/$/'/" the_file

【讨论】:

    【解决方案4】:

    非常简单的逻辑,你只需要在前后呼应引号即可。

    while read -r line
    do
      echo "'$line'"
      # do something
    done < "file"
    

    【讨论】:

    • 为什么所有的回答者和之前的投票者都一心想要使用 sed?这个问题不是问的。这行得通吗?我不熟悉 Bash 控制流程。
    • @AaronHall 因为 sed 是一个很棒的文本转换程序,而且问题并没有专门要求 bash
    【解决方案5】:

    我更喜欢 awk(它比 bash 更快,而且很容易扩展):

    awk '{print "\'" $0 "\'"}'
    

    【讨论】:

      【解决方案6】:

      使用sd,用'包围,命令如下:

      sd '(.*)' \''$1'\'
      

      "包围,命令看起来像:

      sd '(.*)' '"$1"'
      

      希望你明白了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-27
        • 2021-03-02
        • 1970-01-01
        • 2021-10-07
        • 2023-01-01
        • 2011-02-14
        • 1970-01-01
        • 2018-09-25
        相关资源
        最近更新 更多