2017-01-03 7 views
0

この方法でファイルを更新するスクリプトを作成する必要があります。sedを使用して式をチェックして改行文字を削除します

RAWファイル:

<?blah blah blah?> 
<pen> 
<?pineapple?> 
<apple> 
<pen> 

最終的なファイル:

これまでのファイルに新しい行憲章は、我々は削除する必要が

<? 

が続いていない場合

<?blah blah blah?><pen> 
<?pineapple?><apple><pen> 

前の行の最後にそれを追加するための改行。

また、あなたのsedの仕組みを説明すると、本当に役に立ちます。

+0

http://stackoverflow.com/questions/1251999/how-can-i-replace-a-newline-n-using-sedを参照してください。 – pringi

答えて

0

Perlの溶液:

perl -pe 'chomp; substr $_, 0, 0, "\n" if $. > 1 && /^<\?/' 
  • -p
  • chomp 4つの引数と最後の改行
  • substrを削除し、変更後の各ラインを印刷する、線によって入力ラインを読み出しは、ここでは、入力文字列を変更します最初の行($.が入力行番号である)でない場合は、改行の前に改行が追加され、行は<?で始まります。
+0

そこに改行が必要です。タイトルで「sedを使う」... – MaanooAk

+0

@MaanooAk:仕事に適したツールなど – choroba

0

セッド・ソリューション:

sed ':a;N;$!ba;s/\n\(<[^?]\)/\1/g' file > newfile 

は、基本的な考え方は、あなたが\n除いて一致するもので?

続い<ない続くすべての

\nを交換することです。

0

<?をすべて行の先頭に置くと、trsedを組み合わせることができます。

tr -d '\n' < inputfile| sed 's/<?/\n&/g;$s/$/\n/' 

説明:
私は追加catコールを避けtr ... < inputfileないcat inputfile | tr ...を使用しています。
sedコマンドには2つの部分があります。
s/<?/\n&/gには改行が挿入され、&と入力すると一致する文字列が挿入されます(この場合は常に<?なので、1文字しか保存されません)。
$s/$/\n/では、最後の行の最後に改行が追加されます。

EDIT:あなたはすでにそれを持っていたときにのみ、あなたがawkを使用することができます 、<?の前に改行をしたい:

awk '$1 ~ /^<\?/ {print} {printf("%s",$0)} END {print}' 

説明:
はラインではなく、最後のスタートとして改行を考えてみましょう。そして、あなたの質問には、行が<?で始まる時に改行を書く」に移調。あなたは?を脱出し、ラインの開始のための^を使用する必要があります。

awk '$1 ~ /^<\?/ {print}' 

次の印刷あなたは改行文字なしで読んライン。 最後に改行が必要です。

関連する問題