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

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

我有以下文件 foo.txt:

1
AbcdJ
8192
Pak78
8291

我想要一个 bash 脚本来提取所有包含仅有的整数(例如 1、8192,但不是 AbcdJ 或 Pak78)并将其输出到 bar.txt。

答案1

提取仅包含数字的行:

$ grep -E '^[[:digit:]]+$' foo.txt
1
8192
8291

将输出发送到bar.txt

grep -E '^[[:digit:]]+$' foo.txt >bar.txt

怎么运行的

当您想从文件中选择行时,grep这是第一个要尝试的实用程序。

^[[:digit:]]+$正则表达式。其中,^匹配行首、[[:digit:]]+匹配一个或多个数字以及$匹配行尾。由于此正则表达式以 开头^并以 结尾$,因此它仅匹配整行。仅匹配整行的另一种方法是使用选项-x

grep -xE '[[:digit:]]+' foo.txt >bar.txt

该选项-E告诉grep使用扩展正则表达式。这减少了在正则表达式中转义内容的需要。

>象征的重定向. 它使屏幕上显示的输出转到名为 的文件中bar.txt

答案2

AWK解决方案:

$> cat input.txt
1
AbcdJ
8192
Pak78
8291
3 blind mice
$> awk '/^[[:digit:]]+$/' input.txt
1
8192
8291

使用>将输出重定向到文件

awk '/^[[:digit:]]+$/' input.txt > output.txt

答案3

其他一些工具:

  • sed

    $ sed -n '/^[0-9]\+$/ p' foo.txt
    1
    8192
    8291
    
  • bash,比其他方法慢:

    $ while IFS= read -r line; do [[ $line =~ ^[0-9]+$ ]] && echo "$line"; done <foo.txt
    1
    8192
    8291
    

要将输出保存在另一个文件中,请使用输出重定向>

sed -n '/^[0-9]\+$/ p' foo.txt >output.txt
while IFS= read -r line; do [[ $line =~ ^[0-9]+$ ]] && echo "$line"; done <foo.txt >output.txt

相关内容