从标准输入中过滤掉某些字符串

从标准输入中过滤掉某些字符串

我需要一个 Unix 命令,该命令将接受管道输入,过滤掉某些字符串,并将其余字符串写入标准输出。问题是,它需要是一个单行命令,不依赖于典型 Linux 发行版中未提供的任何东西。

上下文是“llvm-config --libs”链接到几个不应该的测试文件,我需要消除这些文件 - 但我需要在 configure.ac 中执行此操作。

不同之处在于,它不是每行一个项目,而是所有项目都在同一行,以空格而不是换行符分隔。

答案1

grep是一个非常常见的 Unix/Linux 命令,至少我还没有遇到过任何需要专门安装基本命令grepegrep而不是另一个过滤命令)的发行版。

采用管道输入,过滤掉某些字符串并将其余部分写入标准输出。

要这样使用它来过滤掉它,您可以执行以下操作(假设您正在使用cat将文件打印到标准输出)

cat "some_file.txt" | grep -v "text to omit"

此外,grep也适用于文件,因此上述命令可以这样写:

grep -v "text to omit" "some_file.txt"

-v标志告诉grep打印所有内容除了指定的文本。如果您想要不区分大小写的搜索,则需要指定标志-i

不是每行一个项目,而是所有项目都在同一行,以空格而不是换行符分隔。

为此,您可以添加一个 for 循环来迭代单词,并仍然利用 grep 来实现您的需要,例如:

for word in "hello there how" are you how "am i today"; do echo $word; done | grep -v "how"

输出结果如下:

are
you
am i today

并且要将其输出到一行上,您可以使用tr命令将 翻译\n为空格:

for word in "hello there how" are you how "am i today"; do echo $word; done | grep -v how | tr '\n' ' '

其输出为:

are you am i today 

第一部分for word in是 shell 脚本for loop。提供的链接特定于,BASH但其他 shell 中的语法非常相似(至少对于CSHKSHASH),因此您可能需要进行调整以使语法与您的特定 shell 相匹配。

希望能够帮到你。

相关内容