簡體   English   中英

如何修剪文本文件中所有定界符之后的尾隨空格

[英]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( |

  1. 通過用空代替開始( ^[[:space:]]* )的空間來刪除​​開始空間
  2. 用管道替換比任何空格( |[[:space:]]* )更多的序列管道

如果文本僅具有空格(ASCII 32)字符,則[[:space:]]可以用單個空格字符代替

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM