打印具有特定数量的特定字符的行

ddz*_*wmm 0 shell text-processing

我有一个大文本保存了很多文件路径及其信息

# just for demostration
/a/b/c/d/e
/a/b/c/d
/a/b/c
/a/b
/a
/b/c
/b
/c/d
/c
....
Run Code Online (Sandbox Code Playgroud)

我只想显示那些具有特定数量的特定字符,例如,

  1. 只有一个 /
  2. 不超过两个 /

这样我只提取根文件夹或只提取到第一级子文件夹。

Rom*_*est 5

Awk 解决方案:

- 只有一个/

awk -v sep=1 'BEGIN{ FS=OFS="/"; sep += 1 }NF == sep' file
Run Code Online (Sandbox Code Playgroud)

输出:

/a
/b
/c
Run Code Online (Sandbox Code Playgroud)

- 不超过两个/

awk -v sep=2 'BEGIN{ FS=OFS="/"; sep += 1 }NF <= sep' file
Run Code Online (Sandbox Code Playgroud)

输出:

/a/b
/a
/b/c
/b
/c/d
/c
Run Code Online (Sandbox Code Playgroud)
  • sep- 多变的; 代表目录分隔符的计数
  • FSOFS- 分别是字段分隔符和输出字段分隔符
  • NF- 代表字段总数

如果您需要将上述方法组合成一个awk命令:

awk -v sep=1 'BEGIN{ FS=OFS="/"; sep += 1 }(sep==2 && NF==sep) || (sep>2 && NF<=sep)' file
Run Code Online (Sandbox Code Playgroud)