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:]]②[^\.]*\.//"

However, I am not sure that the ② symbol is parsed correctly. Maybe you have to use UTF8 codes or something like.

于 2012-04-18T09:54:57.443 回答