从文件中提取整数并输出到另一个文件?

fos*_*nux 5 bash scripts

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

  • 你也可以使用 `-x` 选项来强制整行匹配(而不是使用显式的 `^` 和 `$` 锚点)`grep -Ex '[[:digit:]]+'` (2认同)

Ser*_*nyy 6

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)