Echo
Unix:如何從文件中讀取行的原始內容
我有一個數據文件,內容如下:
department: customer service section: A department: marketing section: A department: finance section: A
當我閱讀每一行時,我會使用
cut
命令提取部門名稱。不幸的是,程序會自動trim
所有多餘的空間,因此我錯誤地剪切了部門名稱。cat dept.dat | while read line do echo $line echo $line | cut -c 12-29 done
例如,原行是:
department: marketing section: A
雖然程序將此行視為:
department: marketing section: A
如何在不修剪所有冗餘空間的情況下閱讀該行?
當您擴展時,您正在失去空間
$line
。在變數擴展周圍加上雙引號,您將保留空格:$ cat dept.dat | while read line > do > echo "$line" > echo "$line" | cut -c 12-29" > done department: customer service section: A customer service department: marketing section: A marketing department: finance section: A finance
正則表達式匹配
您還可以使用以下方法實現類似的功能
sed
:$ cat dept.dat | while read line do echo "$line" echo "$line" | sed -e 's/.*: \(.*\) .*/\1/' done
你也可以使用
awk
:$ cat dept.dat | while read line do echo "$line" echo "$line" | awk '{sub(/.*nt: /,""); sub(/ .*/,""); print }' done
你也可以使用
grep
:$ cat dept.dat | while read line do echo "$line" echo "$line" | grep -oP '(?<=: ).*(?= )' done
**注意:**該
grep
解決方案假定最新版本grep
包括 PCRE(Perl 正則表達式支持)。這些解決方案與這些解決方案的主要區別
cut
在於它們基於模式進行匹配,其中cut
解決方案對輸入數據採用更嚴格的結構(特定字元位置)。靜態位置匹配
使用的替代方法
cut
是使用awk
’ssubstr
功能:$ cat dept.dat | while read line do echo "$line" echo "$line" | awk '{print substr($0,13,16)}' done