2

すべてのファイルのフォルダーをループし、それらに文字列があるかどうかを確認し、それらの別の文字列を変更するには、Linux bashスクリプトが必要です。たとえば、ファイルに AAAA が含まれているかどうかを確認し、BBBB を CCCC に置き換えます。AAAA が含まれていない場合は、DDDD を EEEE に変更します。

いくつかのコードを書きましたが、正しく動作するかどうかわかりません:

#!/bin/bash

PATH = /path/to/files/* # files has no extension

for file in $PATH; do
    if grep -q "AAAA" $file; then
        replace "BBBB" "CCCC" -- $file
    else
        replace "DDDD" "EEEE" -- $file
    fi
done
4

2 に答える 2

0

あなたの仕事をしているワンライナー:

for i in /path/to/files/* ; do if grep -q AAAA "$i" ; then sed -i 's/BBBB/CCCC/g' "$i" ; else sed -i 's/DDDD/EEEE/g' "$i" ; fi ; done   
于 2012-12-17T13:16:48.573 に答える
0

いくつかのこと:PATHは適切な変数名ではありません。変数に関する情報については、こちらを参照してください。コマンドや、それがどれほど広く利用されているかについては詳しくありませんが、おそらく移植性のためにはより良い選択です。また、常に変数を引用する必要があります。 PATHreplacesedsed -i 's/AAAA/BBBB/g'AAAABBBB

#!/bin/bash

for file in /path/to/file/*; do       
    if grep -q "AAAA" "$file"; then
        sed -i 's/BBBB/CCCC/g' "$file"
    else
        sed -i 's/DDDD/EEEE/g' "$file"
    fi
done

$ cat f1.txt 
AAAA
BBBB
DDDD

$ cat f2.txt
BBBB
DDDD

$ ./script.sh 

$ cat f1.txt
AAAA
CCCC
DDDD

$ cat f2.txt
BBBB
EEEE

これにはディレクトリに問題があるため、findファイルのみを選択するように改善され、スペースを含むファイルも処理されるようになりました。

#!/bin/bash

find /path/to/file/ -maxdepth 1 -type f -name | while IFS= read -r file
do
    if grep -q "AAAA" "$file"; then
        sed -i 's/BBBB/CCCC/g' "$file"
    else
        sed -i 's/DDDD/EEEE/g' "$file"
    fi
done
于 2012-12-17T13:32:09.183 に答える