【问题标题】:bash: replace in a string './' for newlinebash:用字符串'./'替换换行符
【发布时间】:2011-10-19 06:55:31
【问题描述】:

使用 find 后我需要迭代文件

var=`find -name "reg"`
#replace ./ for newline
for file in $var; do 
    #something
done

edit: SOLVED with ${string#*/} 它带走了 ./ 我认为我可以活下去

【问题讨论】:

  • 容易多了:find -name "reg" -exec <your code> \;。在“您的代码”中,您将当前查找对象称为{}。如果你的命令支持这种风格,最好使用find -name "reg" -print | xargs <your command>
  • (1.) -execdir-exec 更安全。 (2.) find ... -print0 | xargs -0 ... -print ... 更安全

标签: string bash replace find newline


【解决方案1】:
find -name "reg" | while read file; do ...; done

【讨论】:

    【解决方案2】:
    while IFS= read -r line; do
      var="${line#./}"
      echo "$var"
    done < <(find . -name reg -print)
    

    【讨论】:

      【解决方案3】:

      编辑:

      我不关心您如何获取 $file,使用命令行或任何适合您的方式。我更关心您问题的#do something 部分,我认为这是主要问题,所有发布各种find -name 'reg' | xargs ... 的人在使OP 的问题复杂化之前应该三思而后行。


      使用 sed
      var=`find -name "reg"`
      #replace ./ for newline
      for file in $var; do 
          sed -i 's|\./|\n|g' $file
      done
      

      删除 -i 选项以在屏幕上显示输出,如果获得满意的输出,请使用 -i 实际更改行。
      在第二次阅读时,也许我正在反过来替换,也许你想用 ./ 替换换行符?有点复杂

      sed -i ':a;N;$!ba;s|\n|./|g' $file
      

      与往常一样,在不使用 -i 选项的情况下进行测试,然后决定是否要修改文件。
      有关第二个 sed 魔术的解释,请阅读 this SO 。它完全一样,除了替换字符串的./ 字符。

      【讨论】:

      • 谢谢我用 ${string#*/} 解决了这个问题我会努力解决这个问题
      【解决方案4】:

      好的,我终于解决了伙计们,我可以删除 ./
      字符串=./blabla/bla

      string=${string#*/} #删除直到第一个/包含的东西

      echo $string #got blabla/bla

      【讨论】:

      • 如果您的字符串包含 blah./blabla/bla 怎么办?你会失去第一个'废话'。 ,并且它删除了子字符串,而不是替换它,我认为您没有正确解释您的问题
      • 它永远不会以 ./ find 返回 ./some/file ./some/other/file 之前的内容开始
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      • 2015-03-17
      • 2022-11-17
      • 2014-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多