2016-11-16 23 views
0

bashのtxtファイルから特定の単語を削除したい。ここ は私の現在のスクリプトです:bashのテキストファイルから特定の単語を削除する

echo "Sequenzia Import Tag Sidecar Processor v0.2" 
echo "==============================================================" 
rootfol=$(pwd) 
echo "Selecting files from current folder........" 
images=$(ls *.jpg *.jpeg *.png *.gif) 
echo "Converting sidecar files to folders........" 
for file in $images 
do 
    split -l 8 "$file.txt" tags- 
    for block in tags-* 
    do 
       foldername=$(cat "$rootfol/$block" | tr '\r\n' ' ') 
       FOO_NO_EXTERNAL_SPACE="$(echo -e "${foldername}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')" 
       mkdir "$FOO_NO_EXTERNAL_SPACE" > /dev/null 
       cd "$FOO_NO_EXTERNAL_SPACE" 
     done 
     mv "$rootfol/$file" "$file" 
     cd "$rootfol" 
     rm tags-* $file.txt 
done 
echo "DONE! Move files to import folder" 

それは画像と同じ名前が付けられtxtファイルを読み込み、Sequenzia画像掲示板へのインポート時にタグとして解釈されているフォルダを作成し(myimoutobooruに基づいていない何)(https://code.acr.moe/kazari/sequenzia)。 私がしたいのは、インポートプロセスに問題を起こさないようにサイドカーファイルから特定の単語(実際にはシンボルの組み合わせ)を削除することです。

「> _ <」や「:o」のような組み合わせをファイルから削除したいとします。

私の現在のスクリプトを考慮して、違法な単語のリストでこれを行うことができます。

+0

あなたが試したことと成功しなかった理由についてもう少し詳しくお聞かせください。 –

答えて

0

ラインは、私はあなたが何か使用して$ file.txtなどをきれいに示唆「tags- 『$ file.txtなど』 -l 8分割」する前に:

sef -f sedscript <"$file.txt" >tempfile 

sedscriptはあなたが事前に作成したファイルですあなたの不要な文字列をすべて含んでいます。

s/>_<//g 
s/:o//g 

あなたはsplitfileをtempfileを使用するように変更します。

私のPCでstdin/stdoutを試してみると、sedスクリプトの複数の一致が入力ファイルと同じパスで実行されることが示唆されています。したがってファイルが大きい場合、このappraochはファイルを複数回読み取ることを避けます。

このアプローチの別の変形がある:

sed -e s/>_<//g -e s/:o//g <infile >outfile 

繰り返し

-e s/xxx//g 

オプション必要に応じて何度でも。

+0

ところで、この種のスクリプトはPerlでもっと簡単かもしれません。 Perlはこのようなことをしました。 Bashはsedのような外部プログラムの束を呼び出さなければなりません。 – fidgety

+0

それは仕事のようですが、私はそれを実行したときにほとんどすべての文字を削除し、いくつかの手紙を残したように見えました。ここにスクリプトhttps://code.acr.moe/kazari/sequenzia/snippets/2 –

+0

があります。 sedスクリプト内のいくつかの文字は "特別な"もので、バックスラッシュでエスケープする必要があります。したがって、s /...// gを指定すると、3文字の任意のシーケンスが削除されます。ドットはワイルドカードです。このリンクの詳細は、 "http://unix.stackexchange.com/questions/32907/what-c​​haracters-do-i-need-to-escape-when-using-sed-in-a-script"を参照してください。 – fidgety

0

違法な文字列を列挙してファイルの行を繰り返し、正規表現を使用して入力からそれぞれを削除するファイルを作成することができます(thisなど)。

+0

私はすべてのシンボルを削除したくないので、ファイルの他の有効な行を混乱させるので、組み合わせや単語のリストを削除したい。 –

関連する問題