[英]how to trim trailing spaces after all delimiter in a text file
需要幫助刪除文本文件中所有定界符后的尾部空格時,我有以下數據的文本文件。 例如。
ADDRESS_ID| COUNTRY_TP_CD| RESIDENCE_TP_CD| PROV_STATE_TP_CD|ADDR_LINE_ONE|P_ADDR_LINE_ONE
885637959852960985.0| 76.0|||169 Park lane||Scottish||lane||KU|||||||2013-09-19 14:48:49.609000|
我想刪除定界符和單詞的第一個字母之后的空格。 任何可以執行相同操作的正則表達式或Unix腳本。 尋找如下輸出:
ADDRESS_ID|COUNTRY_TP_CD|RESIDENCE_TP_CD|PROV_STATE_TP_CD|ADDR_LINE_ONE|P_ADDR_LINE_ONE
885637959852960985.0|76.0|||169 Park lane||Scottish||lane||KU||||||2013-09-19 14:48:49.609000|
任何幫助將不勝感激。
awk 'BEGIN{FS=OFS="|"} {for (i=1;i<=NF;i++) gsub(/^[[:space:]]+|[[:space:]]+$/,"",$i)} 1' file
使用perl單線消除每個字段周圍的間距。 假定沒有嵌入式定界符:
perl -i -lpe 's/\s*([^|]*?)\s*/$1/g' file.txt
開關 :
-i
:就地編輯<>
文件(如果提供擴展名,則進行備份) -l
:啟用行結束處理 -p
:創建while(<>){...; print}
while(<>){...; print}
循環在你的輸入文件中的每個“行”。 -e
:告訴perl
在命令行上執行代碼。 下面的perl代碼將刪除行開頭或定界符|
之后的空格|
,
$ perl -pe 's/(?<=\|) +|^ +//g' file
ADDRESS_ID|COUNTRY_TP_CD|RESIDENCE_TP_CD|PROV_STATE_TP_CD|ADDR_LINE_ONE|P_ADDR_LINE_ONE
885637959852960985.0|76.0|||169 Park lane||Scottish||lane||KU|||||||2013-09-19 14:48:49.609000|
要保存對該文件所做的更改,
perl -i -pe 's/(?<=\|) +|^ +//g' file
sed 's/\ //g' input.txt > output.txt
與sed
:
sed -r -e 's/(^|\|)\s+/\1/g' -e 's/\s+$//' filename
在第一個表達式中:
(^|\\|)
匹配行的開頭或|
字符,並將其保存在捕獲組1中。 \\s+
匹配之后的一系列空格字符。 \\1
替換捕獲組1,因此這將刪除行首和定界符后的空白。 g
修飾符使它可以對行中的所有匹配項進行操作。 在第二個表達式中:
\\s+
再次匹配空白序列 $
匹配行尾 對於posix sed(對於GNU sed添加--posix
)sed's / ^ [[:space:]] //; s / | [[:space:]] / | / g'YourFile
使用2替代(sed regex posix版本中沒有OR( |
)
^[[:space:]]*
)的空間來刪除開始空間 |[[:space:]]*
)更多的序列管道 如果文本僅具有空格(ASCII 32)字符,則[[:space:]]
可以用單個空格字符代替
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.