文本檔案是這樣的,
#??
1??
???????8IU
???????underscore
$that??
%red??yellow
$?????
?????????@_
所需的文本檔案應該是這樣的,
#
1
8IU
underscore
$that
%redyellow
$
@_
這是我迄今為止嘗試過的,使用awk
awk -F"[?-?]*" '{print $1}' filename.txt
我得到的輸出是,
#
1
$that
%red
$
并使用它awk -F"[?-?]*" '{print $1,$2}' filename.txt,我得到這樣的輸出,
#
1 ?
?
?
$that
%red yellow
$ ?
?
無論如何在bash腳本中解決這個問題?
uj5u.com熱心網友回復:
使用 perl:
$ perl -CSD -lpe 's/\p{Devanagari} //g' input.txt
#
1
8IU
underscore
$that
%redyellow
$
@_
-CSD告訴 perl 標準流和任何打開的檔案都以 UTF-8 編碼。-p在執行由-e. 如果要就地修改檔案,請添加-i選項。
正則運算式匹配分配給 Unicode 標準中梵文腳本的任何代碼點并將它們洗掉。用于\P{Devanagari}做相反的事情并洗掉非梵文字符。
uj5u.com熱心網友回復:
這sed行得通嗎?
sed 's/\([0-9a-zA-Z[:punct:]]*\)[^0-9a-zA-Z[:punct:]]*/\1/g' input_file
#
1
8IU
underscore
$that
%redyellow
$
@_
uj5u.com熱心網友回復:
使用awk您可以執行以下操作:
awk '{sub(/[^\x00-\x7F] /, "")} 1' file
#
1
8IU
underscore
$that
%redyellow
- 請參閱檔案:https ://www.gnu.org/software/gawk/manual/html_node/Bracket-Expressions.html
使用
[\x00-\x7F]. 這匹配 0 到 127 之間的所有數值,這是 ASCII 字符集的定義范圍。使用補充字串列[^\x00-\x7F]來匹配任何不在 ASCII 范圍內的單位元組字符。
uj5u.com熱心網友回復:
tr非常適合這項任務:
LC_ALL=C tr -c -d '[:cntrl:][:graph:]' < input.txt
它設定 POSIX C 語言環境,以便只有美國英語字符集有效。
然后指示tr洗掉-d補充-c、[:cntrl:][:graph:]控制和繪制字符類(那些不是控制或可見的)字符。由于它將所有區域設定設定為C,所有非美國英語字符都將被丟棄。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/462381.html
