다음과 같이 각 줄에서 "of"로 시작하는 모든 문자를 제거해야 합니다.
Acer_BB1_Locus_1_Transcript_2of285068_Confidence_0.000_Length_1696
Acer_BB1_Locus_1_Transcript_2
답변1
입력이 사용자 로케일의 유효한 텍스트라고 가정하면 다음을 수행할 수 있습니다.
sed 's/of.*//' < input
대체 of
및 임의 개수 *
의 ( )수치( ) 뒤에 빈 문자열이 옵니다 .
(따라서 대부분의 구현에서 로케일의 유효한 문자를 구성하지 않는 첫 번째 바이트에서 중지됨).sed
입력한 인코딩이 사용자의 로케일과 일치하는지 보장할 수 없고 o
일부 문자의 인코딩이 끝나는 문자 인코딩(예: BIG5², BIG5-HKSCS, GBK, GB18030) 중 하나가 아닌 경우 o
다음을 수행할 수 있습니다.
LC_ALL=C sed 's/of.*//' < input
텍스트가 아니거나 로케일 및 GNU 구현과 다른 문자 맵을 사용하여 인코딩된 입력 문제의 예 sed
:
$ locale charmap
UTF-8
$ printf 'Point of St\351phane\n' | sed 's/of.*//'
Point �phane
$ printf 'Point of St\351phane\n' | LC_ALL=C sed 's/of.*//'
Point
( 여기서 Stéphane
latin-1 또는 latin-0 인코딩 사용은 sed
UTF-8 문자 맵이 있는 로케일에서 실행하여 처리됩니다. 여기서 0xe9(0351)만으로는 유효한 문자의 일부를 형성할 수 없습니다.)
BIG5-HKSCS와 같은 문자 인코딩 문제의 예는 다음과 같습니다.
$ echo trèfle of concern | iconv -t BIG5-HKSCS | LC_ALL=C sed 's/of.*//'
tr�
$ echo trèfle of convern | iconv -t BIG5-HKSCS | LC_ALL=zh_HK.big5hkscs sed 's/of.*//' | iconv -f BIG5-HKSCS
trèfle
U+00E8 è
문자는 0x88 0x6f로 인코딩되므로 0x6f도 인코딩입니다 o
. sed
이러한 문자를 올바르게 디코딩하려면 이 문자 맵을 사용하는 로캘에서 실행 해야 합니다 .
일부 sed
구현은 입력을 디코딩할 수 없다는 오류로 인해 실패할 수도 있습니다.
² 귀하가 언급한 Acer는 이 문자 세트를 발명한 5대 기업 중 하나입니다.