如何在几个子目录中的多个文件中更改一个字符串?

时间:2018-11-18 20:23:37

标签: linux bash ubuntu terminal git-bash

我的问题是,如何在BASH中更改一个目录和几个子目录中的多个txt文件中的一个单词?我做了如下(检查所有类似的主题),但仍然无法正常工作。 changePhrase是子目录和文件所在目录的名称。在这些文件中是我要更改的字符串。我必须使用for循环(这是一项任务)。 错误在哪里?谢谢。

#!/bin/bash

for file in changePhrase; do
    if [[ -f $file ]] && [[ -w $file ]]; then
        sed -i -- 's/old/new/g' "$file"
    fi
done

3 个答案:

答案 0 :(得分:0)

可以做到

find changePhraseDir -type f -a -writeable|xargs sed -i 's/foo/bar/'
  • -type f->文件
  • -a->和
  • -writable->您的-w

答案 1 :(得分:0)

我认为,只要将find添加到for循环中,代码就可以工作:

    Traceback (most recent call last):
    File "/home/enzoportela/PycharmProjects/SoftwareRover2018.2/SoftRover/I.A Rover(2018.2).py", line 25, in <module>
    playsound.playsound("test.mp3")
  File "/home/enzoportela/anaconda3/envs/SoftwareRover2018.2/lib/python3.6      /site-packages/playsound.py", line 91, in _playsoundNix
    import gi
    ModuleNotFoundError: No module named 'gi'

答案 2 :(得分:0)

如果changePhrase是目录的名称,请尝试在其后附加/**{,/*}。使用通配符将使循环遍历所有文件。