使用 sed 和 grep 根据长度过滤行

use*_*915 4 grep sed

如何使用sed和定位长度超过 100 且小于 150 个字符的行grep

αғs*_*нιη 10

使用命令

sed -nr '/^.{101,149}$/p' infile
Run Code Online (Sandbox Code Playgroud)

分解:

  • -n: 没有打印

-n选项将阻止打印任何内容,除非找到明确的打印请求(^.{101,149}$长度超过 100(>=101) 且小于 150 个字符(<=149) 的行”)。该/p标志用作重新打开打印的一种方式。

  • -r: -r (--regexp-extended)

-r启用扩展正则表达式。如果您的 sed 无法识别-r-E则替换为,或者如果您的 sed 版本不支持大括号,则您将需要转义大括号。那么命令就是sed -n '/^.\{101,149\}$/p' infile.

  • ^只是为行首锚和$线路的末端。

  • 单个.匹配任何单个字符

所以,你明白了sed -nr '/^.{101,149}$/p' infile,我们正在寻找从头到尾的一行,其中包含或包含我们定义的规则。

这是一种复制grepwith功能的方法,sed例如:sed -n '/.../p':)

使用命令

grep -E '^.{101,149}$' infile
Run Code Online (Sandbox Code Playgroud)
  • -E这与 sed 的-r选项相同,但用于grep命令。所以如果你不想使用只是逃避花括号。

使用命令

awk 'length($0)>100 && length($0)<150' infile
Run Code Online (Sandbox Code Playgroud)
  • length返回行的长度。在 awk 中,$0指定整行。所以如果行的长度在 100 到 150 之间,将被打印出来。

  • 最好使用 `sed -E` 而不是 `sed -r`,`-E` 也可以与 BSD sed 一起使用。 (2认同)