如果我有一個包含以下內容的檔案:
[
{[ ...,..., ]},
{[ ...,..., ]},
{[ ...,..., ]},
{[ ...,..., ]},
]
我想洗掉最后一個逗號,所以我得到:
[
{[ ...,..., ]},
{[ ...,..., ]},
{[ ...,..., ]},
{[ ...,..., ]} <----- no comma
]
到目前為止,我找不到一種簡單的方法來做到這一點 - 大多數解決方案都會洗掉整行或進行與我正在嘗試的內容不匹配的行搜索。我覺得這將是一個sed或awk命令。
uj5u.com熱心網友回復:
rev file | sed -z 's/,//' | rev
反轉檔案,洗掉零分隔流中的第一個逗號,因此整個檔案中的第一個逗號,然后再次反轉它。
uj5u.com熱心網友回復:
Using ed,與 不同的是,它sed用于編輯檔案,因此允許在檔案中向后搜索:
printf "%s\n" '?,$?s/,$//' w | ed -s file
將找到以逗號結尾的最后一行并洗掉該逗號,然后保存檔案。
我同意@Barmar 在評論中的觀點,盡管更好的解決方案是修復生成檔案的任何內容,使其首先不包含尾隨逗號。
uj5u.com熱心網友回復:
使用 GNU sed:
sed -z 's/},\n]/}\n]/' file
輸出:
[
{[ ...,..., ]},
{[ ...,..., ]},
{[ ...,..., ]},
{[ ...,..., ]}
]
uj5u.com熱心網友回復:
用shell引數擴展,一味去掉最后一個逗號:
contents=$(< file)
fixed=${contents%,*}${contents##*,}
echo "$fixed"
使用文本工具:反轉檔案,洗掉第一行的結尾逗號,然后重新反轉檔案
tac file | awk '!p && /,$/ {sub(/,$/, ""); p = 1} 1' | tac
uj5u.com熱心網友回復:
即使“,”不是該行的最后一個字符,也應該允許所需的輸出。
查找包含逗號的最后一行并捕獲行號:
line_no=$(grep -n ',' t.dat | tail -n 1 | cut -f1 -d:)
然后從該特定行中洗掉最后一個逗號,無論它出現在哪里:
awk -v li="${line_no}" 'BEGIN{ FS=OFS="," } NR==li{ for(i=1; i<NF-1; i ). printf "%s", $i OFS; printf "%s\n", $i "" $NF; next }1' t.dat
這可以組合為:
awk -v li="$(grep -n ',' t.dat | tail -n 1 | cut -f1 -d:)" 'BEGIN{ FS=OFS="," } NR==li{ for(i=1; i<NF-1; i ) printf "%s", $i OFS; printf "%s\n", $i "" $NF; next
}1' t.dat
t.dat 內容:
[
{[ ...,..., ]},
{[ ...,..., ]},
{[ ...,..., ]},
{[ ...,..., ]},
]
處理 t.dat:
$ awk -v li="$(grep -n ',' t.dat | tail -n 1 | cut -f1 -d:)" 'BEGIN{ FS=OFS="," }
NR==li{ for(i=1; i<NF-1; i ) printf "%s", $i OFS;
printf "%s\n", $i "" $NF; next
}1' t.dat
輸出:
[
{[ ...,..., ]},
{[ ...,..., ]},
{[ ...,..., ]},
{[ ...,..., ]}
]
uj5u.com熱心網友回復:
如果整個檔案以該塊結尾,則只需執行
gawk FS RS='[]][}],\n[]]\n' ORS=']}\n]\n'
nawk $$ RS='[]][}],\n[]]\n' ORS=']}\n]\n'
mawk //_ RS='[]][}],\n[]]\n' ORS=']}\n]\n'
[
{[ ...,..., ]},
{[ ...,..., ]},
{[ ...,..., ]},
{[ ...,..., ]}
]
uj5u.com熱心網友回復:
awk '/,/ && count==1{gsub(/,$/,"")}1' <(tac file)|tac
uj5u.com熱心網友回復:
使用sed
$ sed -z 's/\(.*\),/\1/' input_file
或者
$ sed 'N;s/,\(\n]\)/\1/' input_file
輸出
[
{[ ...,..., ]},
{[ ...,..., ]},
{[ ...,..., ]},
{[ ...,..., ]}
]
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/496496.html
標籤:重击
下一篇:awk包括回車(CR)字符
