0

私は次のようなファイルを持っていますfile1.txt

This is some text.
This is some more text. ② This is a note.
This is yet some more text.

「②」の後に表示されるテキストと、その直前に表示される単一のスペース(そのようなスペースが存在する場合)を削除する必要があります。たとえば、上記のファイルは次のようになりますfile2.txt

This is some text.
This is some more text.
This is yet some more text.

「②」、それに続くもの、および先行する単一のスペースを削除するにはどうすればよいですか?

4

4 に答える 4

3

Perl ソリューション:

$ perl -CS -i~ -p -E's/ ②.*//' file1.txt

file1.txt に正しいデータがあり、file1.txt~ に元のファイルのバックアップが作成されます。

于 2012-04-19T09:12:36.777 に答える
2

ほとんどの UNIX ユーティリティが Unicode で動作しないことを理解していただければ幸いです。それに応じて調整する必要がない場合は、入力がUTF-8であると想定しています。

#!/bin/bash
function px {
 local a="$@"
 local i=0
 while [ $i -lt ${#a}  ]
  do
   printf \\x${a:$i:2}
   i=$(($i+2))
  done
}
(iconv -f UTF8 -t UTF16 | od -x |  cut -b 9- | xargs -n 1) |
if read utf16header
then
 echo -e $utf16header
 out=''
 while read line
  do
   if [ "$line" == "000a" ]
    then
     out="$out $line"
     echo -e $out
     out=''
   else
    out="$out $line"
   fi
  done
 if [ "$out" != '' ] ; then
   echo -e $out
 fi
fi |
 (perl -pe 's/( 0020)* 2461 .*$/ 000a/;s/ *//g') |
 while read line
  do
    px $line
  done | (iconv -f UTF16 -t UTF8 )
于 2012-04-18T13:04:48.797 に答える
1

これを試して:

sed -e '/②/ s/[ ]*②.*$//'
  • /②/魔法の記号を含む行だけを探します。
  • [ ]*魔法の記号の前の任意の数の (どれにも一致しない) スペース。
  • .*$行末までの他のすべて。
于 2012-04-20T01:55:43.687 に答える
1

sed -e "s/[[:space:]]②[^\.]*\.//"

ただし、②の記号が正しく解析されているかどうかはわかりません。UTF8 コードなどを使用する必要があるかもしれません。

于 2012-04-18T09:54:57.443 に答える