Cut
你能指定一個用於切割的外殼嗎?
可能重複:
我可以用來
cut
從文件中提取列:$ cat foo foo,bar,hello bash,baz,world $ cut -d\, -f2 foo bar baz
但是,如果一列中有一個分隔符在這樣的外殼內是安全的呢?
$ cat foo foo,"hello, world",bar bash,goodbye,baz $ cut -d\, -f2 temp12 "hello goodbye
有沒有辦法告訴
cut
尊重引號""
字元的包圍?
cut
如果您首先預處理其輸入以轉義引號內的字元(例如,將“_”替換為“_u”,將“,”替換為引號內的“_c”,或者將每個字元替換為它們的 2 字節十六進製表示法,則可以做到這一點) 並對其進行後處理以恢復該轉義。就像是:
perl -pe 's/"(.*?)"/"\"".unpack("H*", $1)."\""/ge' | cut -d, -f2 | perl -pe 's/"(.*?)"/"\"".pack("H*",$1)."\""/ge'
(假設引號內(或外)沒有轉義引號)。
但是,考慮到它需要付出的努力,您不妨使用適當的 csv 解析器,或者使用類似 perl 的正則表達式引擎來完成它。
絕對不適合 GNU cut,至少:
/* The delimeter character for field mode. */ static unsigned char delim;
(如 GNU coreutils 原始碼所示)