我有一個部分損壞的JSON文件的數據庫。由於某種原因編寫這些文件的人在文件末尾添加了一個額外的逗號。有這些文件的無數,所以我需要修復它們。這是什麼樣子:sed命令與 n
{
"foo": "bar",
"foo1": "bar1",
"foo2": "bar2",
}
所以我想用sed命令擺脫逗號。現在,我有sed的|',\ n}'|'\ n}'|'但它不會修改文件。我究竟做錯了什麼?
我有一個部分損壞的JSON文件的數據庫。由於某種原因編寫這些文件的人在文件末尾添加了一個額外的逗號。有這些文件的無數,所以我需要修復它們。這是什麼樣子:sed命令與 n
{
"foo": "bar",
"foo1": "bar1",
"foo2": "bar2",
}
所以我想用sed命令擺脫逗號。現在,我有sed的|',\ n}'|'\ n}'|'但它不會修改文件。我究竟做錯了什麼?
隨OS X附帶的sed
版本不會將\n
視爲換行符,而是將其視爲換行符'n'(將其縮減爲常規'n')。由於您使用bash
,你可以嘗試以下方法:
sed $'s|,}|\\\n|' file.txt
的$'...'
是一種特殊類型的bash
引用的,允許特殊對待某些逃逸。 \\\n
是一個轉義反斜槓,後跟一個換行符,作爲單個轉義換行符呈現給sed
。
更新:在記住在搜索文本中使用$
而不是換行符後,我意識到你不能匹配後面一行中的後跟一個大括號的命令(或者至少,我不知道如何與我的有限命令sed
)。
搜索後,我發現這個:sed'N; s |,\ n} |} |'但現在它會刪除大括號而不是逗號。 – ThurnisH41ey
正在運行sed $ | | \\\ n} | \\\ n} |' file.txt返回sed:1:「s |,\ } | \ } |」:未終止的替代模式 – ThurnisH41ey
這給出:OSX 10.6.2上的「未終止的替代模式」 – anubhava
你可以試試AWK:
awk '{ if (/}/) sub(",$", "", last); if (last) print last; last=$0 } END { print last }'
這是一個SED解決方案,在OSX上的作品,以及:
sed -e ':a' -e 'N; $!ba' -e 's/,\(\n}\)/\1/' file.json
作爲替代你可以安裝GNU-SID上OSX使用:
sudo brew install gnu-sed
然後運行:
gsed -e ':a; N; $!ba; s/,\(\n}\)/\1/' file.json
請格式化您的代碼,因此它更具可讀性。例如,在「sed ...」行而不是引號(或者在這種情況下是開頭引號)後面加上反引號 –
您是否安裝了Perl?使用Perl比sed更容易 – DVK