【问题标题】:Bash creating a string, if string already exists replace itBash 创建一个字符串,如果字符串已经存在,则替换它
【发布时间】:2021-09-26 01:27:58
【问题描述】:

我想实现这个程序。 我有这个命令: sed -i -e 's/few/asd/g' /usr/local/sbin/.myappenv 如果文件.myappenv 中有few 字符串文本,则此命令有效。但无论是否找到 few,此命令都无法简单地创建 asd 文本。

所以,如果有 few 文本,应该替换它,如果 few 文本丢失,只需在第一行创建它

编辑_:

它应该在文档的第一行创建字符串.myappenv,只有在没有巧合的情况下才应该创建。

文件.myappenv 应该包含=>

asd

如果文件已经填充了few,只需替换它 =>

asd

【问题讨论】:

  • just create it. 在哪里?在行的开头?最后?在第 5 个字符处?
  • 请在您的问题中添加示例输入(无描述、无图像、无链接)以及该示例输入所需的输出(无评论)。
  • 抱歉没有指定,它应该在第一行创建它@KamilCuk
  • 我编辑了问题以解释我面临的问题@Cyrus
  • 我还是不明白。似乎有两种情况:文件包含few,或者不包含。你能显示这两种场景的输入和期望的输出吗?

标签: string bash sed


【解决方案1】:

这可能对你有用(GNU sed):

sed 'H;$!d;x;/few/!s/^/asd/;t;s//asd/;s/.//' file

在保留空间中复制文件(第一行将有一个前置换行符)。

在文件末尾,如果few不匹配,则插入文字asd

否则,将第一次出现的few 替换为asd,并删除文件开头引入的换行符。

要将所有出现的few 替换为asd,请使用:

sed 'H;$!d;x;/few/!s/^/asd/;t;s//asd/g;s/.//' file

替代方案:

grep -q few file && sed 's/few/asd/' file || (echo asd; cat file)

【讨论】:

    【解决方案2】:

    使用单个awk 你可以这样使用:

    awk 'FNR == NR {if (/few/) {n = 1; nextfile}; next}
    FNR == 1 && !n {print "asd"} n {gsub(/few/, "asd")} 1' file file
    

    【讨论】:

      【解决方案3】:

      如果文本少,就替换掉,如果少了,就在第一行创建。

      这是一个如果。

      if <file has text>; then <replace text>; else <add text to first line>; fi
      

      或在 bash 中:

      file=/usr/local/sbin/.myappenv
      if grep -q few "$file"; then
           sed 's/few/asd/' "$file"
      else
           { 
              echo asd
              cat "$file"
           } > "$file".tmp
           mv "$file".tmp "$file"
      fi
      

      How to test if string exists in file with Bash? https://unix.stackexchange.com/questions/99350/how-to-insert-text-before-the-first-line-of-a-filehttps://mywiki.wooledge.org/BashGuide/TestsAndConditionals 。您可能会对某些自动化方法感兴趣,例如 ansible lineinfilechezmoi,具体取决于目标。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-04
        • 2021-11-22
        • 1970-01-01
        • 2021-07-11
        • 1970-01-01
        • 2020-05-11
        • 2017-02-07
        • 1970-01-01
        相关资源
        最近更新 更多