我有以下文件 foo.txt:
1
AbcdJ
8192
Pak78
8291
Run Code Online (Sandbox Code Playgroud)
我想要一个 bash 脚本,它提取所有只包含整数(例如 1、8192 但不是 AbcdJ 或 Pak78)的行并将其输出到 bar.txt。
Joh*_*024 11
这将提取仅包含数字的行:
$ grep -E '^[[:digit:]]+$' foo.txt
1
8192
8291
Run Code Online (Sandbox Code Playgroud)
这将输出发送到bar.txt
:
grep -E '^[[:digit:]]+$' foo.txt >bar.txt
Run Code Online (Sandbox Code Playgroud)
当您想从文件中选择行时,grep
是第一个尝试的实用程序。
^[[:digit:]]+$
是一个正则表达式。其中,^
匹配行首,[[:digit:]]+
匹配一位或多位数字,$
匹配行尾。因为这个正则表达式以 开头^
和结尾$
,所以它只匹配整行。仅匹配整行的另一种方法是使用-x
选项:
grep -xE '[[:digit:]]+' foo.txt >bar.txt
Run Code Online (Sandbox Code Playgroud)
该选项-E
告诉grep
使用扩展的正则表达式。这减少了在正则表达式中转义的需要。
该>
表示redirection(重定向)。它导致本应出现在屏幕上的输出转到名为bar.txt
.
AWK解决方案:
$> cat input.txt
1
AbcdJ
8192
Pak78
8291
3 blind mice
$> awk '/^[[:digit:]]+$/' input.txt
1
8192
8291
Run Code Online (Sandbox Code Playgroud)
使用>
重定向输出到文件
awk '/^[[:digit:]]+$/' input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)