【问题标题】:unescaped newline inside substitute pattern替代模式内未转义的换行符
【发布时间】:2015-11-05 16:29:05
【问题描述】:

我有一个包含 100 个国家/地区列表的 txt 文件,它们周围没有引号。我正在尝试改变这一点

Canada
USA

进入这个

countries['Canada']=true

等等

这是我正在尝试的 sed 命令,'\1' 用引号表示国家。

sed -e "s/\(.*\)/countries['\1']=true" source.txt > output.txt

我得到的错误是

替代模式内未转义的换行符

我需要什么 sed 命令来实现我想要做的事情,为什么会出现这个错误

【问题讨论】:

    标签: sed


    【解决方案1】:

    我会在开头和结尾添加一些东西:

    sed -e "s/^/countries['/" -e "s/$/']=true/" source.txt > output.txt
    

    【讨论】:

      【解决方案2】:

      你只是错过了结尾的/

                                             v
      $ sed -e "s/\(.*\)/countries['\1']=true/" file
      countries['Canada']=true
      countries['USA']=true
      

      还请注意,您不需要捕获组,只需将所有内容与.* 匹配,然后使用& 将其打印回来:

                  |-------------|
                  vv            v
      $ sed -e "s/.*/countries['&']=true/" a 
      countries['Canada']=true
      countries['USA']=true
      

      【讨论】:

      • 谢谢。你知道为什么如果我尝试用双引号而不是像 countries["&"] 这样的单引号括起来 & 会不起作用吗
      • 别着急,明白了,需要转义双引号。
      • @Leahcim 可能是因为您已经在 sed 语句中使用了 " 引号。尝试使用sed '...',它会起作用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-19
      • 2020-12-14
      • 2019-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多