我有以下文件 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)