sed
またはawk
を使用します。より多くのプラットフォームに依存しないので、awk
でこれを行う方法を説明します。 awk
がない場合は、http://invisible-island.net/mawk/mawk.htmlからmawkバイナリをダウンロードできます。
考え方は次のとおりです。awk
には、行区切り文字が改行や改行ではないことを伝えてください。私はコンマを使用します。
好きではない文字列を置き換える正規表現を使用します。
私が作成したテストファイルです。 test.txt
として保存します。
1,Line before ...
2,Broken line ... 14 MakeUp Road
Hull
HU99 9HU
3,Line after
、次のようにawk
を呼び出す:私はあなたがcleanup.awk
という名前のファイルにawkのコードを保存することを示唆している
awk 'BEGIN { RS = ","; ORS=""; s=""; } $0 != "" { gsub(/MakeUp Road[\n\r]+Hull[\n\r]+HU99 9HU/, "MakeUp Road Hull HU99 9HU"); print s $0; s="," }' test.txt
を。ここでは、より良い形式のコードを説明しています。
awkのファイルを使用して
BEGIN {
# This block is executed at the beginning of the file
RS = ","; # Tell awk our records are separated by comma
ORS=""; # Tell awk not to use record separator in the output
s=""; # We will print this as record separator in the output
}
{
# This block is executed for each line.
# Remember, our "lines" are separated by commas.
# For each line, use a regular expression to replace the bad text.
gsub(/MakeUp Road[\n\r]+Hull[\n\r]+HU99 9HU/, "MakeUp Road Hull HU99 9HU");
# Print the replaced text - $0 variable represents the line text.
print s $0; s=","
}
次のように、あなたは、交換を実行することができます。複数のファイルを処理する
awk -f cleanup.awk test.txt
、あなたはbashスクリプトを作成することができます:あなたが使用することができます
for f in `ls *.txt`; do
# Execute the cleanup.awk program for each file.
# Save the cleaned output to a file in a directory ../clean
awk -f cleanup.awk $f > ../clean/$f
done