我有看起來像這樣的管道分隔檔案:
col1|col2|col3|col4
a |b | some value | hello world
a |b | some value | hello world
a |b | some value | hello world
a |b | some value | hello world
每列中的值(包括最后一列)都有尾隨空格。如何使用洗掉尾隨空格sed使我的輸出看起來像這樣?
col1|col2|col3|col4
a|b|some value|hello world
a|b|some value|hello world
a|b|some value|hello world
a|b|some value|hello world
這是我嘗試過的,它洗掉了分隔符之間的空格,但不是在最后一列的末尾:
sed -i -e "s/\s*|/|/g" somefile.txt
uj5u.com熱心網友回復:
你可以使用這個sed:
sed -E 's/[[:blank:]]*(\|)[[:blank:]]*|[[:blank:]] $/\1/g' file
col1|col2|col3|col4
a|b|some value|hello world
a|b|some value|hello world
a|b|some value|hello world
a|b|some value|hello world
這里:
[[:blank:]] (\|)[[:blank:]]*: 匹配前后的空格||: 或者[[:blank:]] $: 匹配結束前的空格
替代解決方案awk:
awk -F ' *\\| *' -v OFS='|' '{sub(/ $/, "", $NF)} 1' file
uj5u.com熱心網友回復:
你可以使用這個sed命令:
sed 's/[[:blank:]]*$//; s/[[:blank:]]*|[[:blank:]]*/|/g' file
如果您還想洗掉前導空格,則只需添加s/^[[:blank:]]*//到上面的sed運算式中。
uj5u.com熱心網友回復:
第一種解決方案:這是另一種awk變體,用您展示的樣本撰寫和測驗;用 GNU 撰寫和測驗awk。
awk -F'[[:space:]]*\\|[[:space:]]*' -v OFS="|" '
{
sub(/[[:space:]] $/,"")
$1=$1
}
1
' Input_file
第二種解決方案:在GNU中制作欄位分隔符awk并使用請嘗試以下操作。matchawk
awk -F '[[:space:]]*\\|[[:space:]]*' -v OFS='|' '
($1=$1) && match($0,/[[:space:]] $/){
print substr($0,1,RSTART-1)
}
' Input_file
uj5u.com熱心網友回復:
與perl:
perl -lpe 's/\s (?=\||$)|\|\K\s //g'
perl -F'\|' -lane 'print join "|", map {s/^\s |\s $//gr} @F'
perl -F'\s*\|\s*' -lane '$F[-1]=~s/\s $//; print join "|", @F'
用于perl -i就地編輯。
uj5u.com熱心網友回復:
這可能對您有用(GNU sed):
sed -E 's/^\s |\s*(\|)\s*|\s $/\1/g' file
使用交替 ( |) 以洗掉第一個欄位之前、欄位兩端和記錄末尾的空格。
注意中間的替代使用*量詞而不是 因為它執行雙重任務,從欄位分隔符的任一側洗掉空格。然而,這反過來意味著每個欄位分隔符都將被替換。如果每次出現的空白都是單獨完成的,則必須重復替換命令以處理第一輪中錯過的那些替換,即正則運算式引擎不會在全域(g標志)背景關系中回溯。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/515339.html
標籤:重击壳sed
