在特定点分隔文件中的每一行

Vil*_*age 3 awk split replace sed

我有一个格式如下的字典文件:

 A B [C] D
Run Code Online (Sandbox Code Playgroud)

其中a是一个单词(没有空格),B是另一个单词(里面没有空格),C是发音(这里有空格),D是用单词表示的定义(有空格,有多种符号).

我希望将它分为4个部分,如下所示:

 A@@@@B@@@@C@@@@D
Run Code Online (Sandbox Code Playgroud)

以这种方式,第一空间被转换为@@@@,所述第一[被转换成@@@@,并且所述第一]转换为@@@@.这样可以轻松导入电子表格中作为CSV(@@@@用作逗号).

这可以通过awk其他工具实现BASH吗?

更新:

以下是一些示例:

????? ????? [Yi1 qian1 ling2 yi1 ye4] /The Book of One Thousand and One Nights/
??? ??? [Hui1 gu1 niang5] /Cinderella/a sudden rags-to-riches celebrity/
?? ?? [xue3 bai2] /snow white/
Run Code Online (Sandbox Code Playgroud)

将转换为:

?????@@@@????? @@@@Yi1 qian1 ling2 yi1 ye4@@@@ /The Book of One Thousand and One Nights/
???@@@@??? @@@@Hui1 gu1 niang5@@@@ /Cinderella/a sudden rags-to-riches celebrity/
??@@@@?? @@@@xue3 bai2@@@@ /snow white/
Run Code Online (Sandbox Code Playgroud)

考虑到任何东西可能出现在第三组之后@@@@,包括更多空格[等,但是,在第三组之前@@@@,一切都是格式一致的.

Mar*_*ijn 5

我认为sed会更容易:

sed -e 's/ /@@@@/' -e 's/ [/@@@@/' -e 's/] /@@@@/' infile > outfile
Run Code Online (Sandbox Code Playgroud)

默认情况下(即如果您未g在末尾指定修饰符),每行只能使用一次替换.

或者,如果您想要就地执行此操作:

sed -i -e 's/ /@@@@/' -e 's/ [/@@@@/' -e 's/] /@@@@/' infile
Run Code Online (Sandbox Code Playgroud)

(但并非所有版本的sed支持,你将丢失输入文件)