6

我需要编写一个 shell 脚本来通过插入换行符来重新格式化文件。条件是当我们在文件中遇到逗号时应该插入一个换行符。

例如,如果文件delimiter.txt包含:

this, 是一个文件,应该添加一个,换行符,当我们找到时,一个逗号。

输出应该是:

this
is a file
that should
be added
with a
line break
when we find a
a comma.

可以这样做吗grepawk

4

4 回答 4

8

使用 GNU sed

sed 's/, /\n/g' your.file

输出:

this
is a file
that should
be added
with a
line break
when we find a
a comma. 

注意:上述语法仅适用于具有\nas 行分隔符的系统,如 Linux 和大多数 UNIX。

如果您需要 aa 脚本中的门户解决方案,请使用以下表达式,该表达式使用文字换行符,而不是\n

sed 's/,[[:space:]]/\
/g' your.file

感谢@EdMorten 的建议。

于 2013-08-28T11:09:21.630 回答
6

tr是为了

$ tr ',' '\n' <<< 'this, is a file, that should, be added, with a, line break, when we find, a comma.'
this
 is a file
 that should
 be added
 with a
 line break
 when we find
 a comma.

或者,如果您必须使用 awk:

awk '{gsub(", ", "\n", $0)}1' delimiter.txt
于 2013-08-28T11:09:56.943 回答
3

使用 awk 的解决方案:

awk 1 RS=", " file
this
is a file
that should
be added
with a
line break
when we find
a comma.
于 2013-08-28T11:28:36.097 回答
0

这是使用perl的解决方案:

perl -pe 's#,#\n#g'

这是它在 OpenBSD 或 OS X 上正常工作的示例:

% echo 'a,b,c,d,e' | perl -pe 's#,#\n#g'
a
b
c
d
e
%

例如,与之前的 sed 解决方案不同,这个 perl 可以在任何地方使用,因为相同的搜索/替换代码段不适用于 OpenBSD 或 OS X 上的 BSD sed :

% echo 'a,b,c,d,e' | sed -E 's#,#\n#g'
anbncndne
%
于 2019-03-22T09:49:50.247 回答