我有一个 1 行文件,其格式为:
{port1 dev1 M1 s} {port1 dev1 M1 s} {port3 dev2 M1 g} {port1 dev1 M1 d} {port1 dev1 M3 g} ...
我想像这样将这一行和 cat 拆分为基于大括号 {} 的输出文件。我怎么做 ?
port1 dev1 M1 s
port1 dev1 M1 s
port3 dev2 M1 g
port1 dev1 M1 d
port1 dev1 M3 g
我有一个 1 行文件,其格式为:
{port1 dev1 M1 s} {port1 dev1 M1 s} {port3 dev2 M1 g} {port1 dev1 M1 d} {port1 dev1 M3 g} ...
我想像这样将这一行和 cat 拆分为基于大括号 {} 的输出文件。我怎么做 ?
port1 dev1 M1 s
port1 dev1 M1 s
port3 dev2 M1 g
port1 dev1 M1 d
port1 dev1 M3 g
使用 perl:
或使用 sed:
grep
使用带有 PCRE 支持的GNU :或者对于包含至少一个非空格的非{} 序列:
与
pcregrep
:如果
{...}
s 可以嵌套(但平衡):在这样的输入上:
它给:
}
这首先使用换行符替换每个tr
。这为sed
命令提供了可以使用的单独行,其中每行都以可能的空格和{
. 这些字符被命令从行首删除sed
。与 just 相同的事情
sed
:该
y
命令的工作方式与tr
此示例中的一样。使用 GNU
awk
或mawk
,但不使用 BSDawk
:这会将数据解释为由
{
或分隔的记录}
,然后打印每个包含除制表符或空格以外的内容的此类记录。使用 Perl:
这会将
print
命令应用于通过将给定的正则表达式与输入进行匹配而返回的每个元素。该print
命令还将换行符附加到每个元素以将它们放在单独的行上。使用 GNU sed 的解决方案:
解决方案
sed
+tr
。使用grep + tr:
使用sed:
这可以使用“sed”来完成,如下所示:
其中 P;D 组合设置了一个隐式循环,并且在循环主体期间,我们确保打印非空字段。
沿着类似的路线:
我们在其中拆分记录,然后过滤非空字段并在 for 循环中将它们打印一行。
用 bash
与
tr
: