Text-Processing
sed:將多餘的空格刪除到字元串之間的單個空格,同時保持前導製表符不變
我有一個程式碼:
1 /** 2 a b c 3 **/ 4 int main() { 5 int x; 6 if ( condition) { 7 return x; 8 } 9 }
我需要將標記或字元串之間的多個空格更改為單個空格,例如在第 7 行中,但註釋(第 2 行)不應受到影響,也不應影響程式碼中的前導選項卡。所以,輸出應該是:
1 /** 2 a b c 3 **/ 4 int main() { 5 int x; 6 if ( condition) { 7 return x; 8 } 9 }
我嘗試使用 ’tr’:
~$ tr -s " " < file
但它更改了第 2 行以及將第 5 行中的前導製表符刪除到第 8 行。可以使用sed
嗎?
會走多遠
sed -rn '\#/\*\*#,\#\*\/*# {p;b}; s/([^ ]) +/\1 /g; p' file
我懂了?它列印未修改的註釋行(但不能在同一行處理註釋開/關)並跳過腳本的其餘部分。對於未註釋的行,它將非空格字元後面的任何多個空格(因此行縮進超出範圍)壓縮到一個空格。
最後,這對我有用:
sed -i 's/\([a-zA-Z]\+\)\( *\)\([a-zA-Z]\+\)/\1 \3/g' $1