相关疑难解决方法(0)

无用的猫吗?

这可能是许多常见问题解答 - 而不是使用:

cat file | command
Run Code Online (Sandbox Code Playgroud)

(这被称为无用的猫),正确的方式应该是:

command < file
Run Code Online (Sandbox Code Playgroud)

在第二,"正确"的方式 - 操作系统不必产生额外的过程.
尽管知道这一点,我继续使用无用的猫有两个原因.

  1. 更美观 - 我喜欢数据仅从左到右均匀移动.而且它更容易更换cat别的东西(gzcat,echo,...),添加第二个文件或插入新的过滤器(pv,mbuffer,grep...).

  2. 我"觉得"在某些情况下可能会更快.更快,因为有2个进程,1st(cat)执行读取而第二个执行任何操作.它们可以并行运行,这意味着有时可以更快地执行.

我的逻辑是否正确(第二个原因)?

shell command-line cat

90
推荐指数
8
解决办法
2万
查看次数

只返回正则表达式匹配,而不是整行

我有一个多行文档,我希望从中提取一个特定的关键字和之后的单词.它看起来像这样:

This is key word1 line 1.

This is line 2.

This is key word2 line 3. 
Run Code Online (Sandbox Code Playgroud)

如果我使用egrep 'key [^s]+ ',输出是:

This is key word1 line 1.

This is key word2 line 2. 
Run Code Online (Sandbox Code Playgroud)

但是,我希望输出只是匹配而不是整行,即:

key word1

key word2
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

regex grep sed

17
推荐指数
1
解决办法
3万
查看次数

只打印匹配的单词,而不是整行通过grep

我熟悉bash中的shell编程,但由于某种原因egrep -o只打印匹配的单词不起作用并显示如下错误.

环境是putty上的ksh unix控制台而不是linux或ubuntu终端......任何建议都表示赞赏!

终端输入和输出:

AB12 $ echo "i am a boy" | grep -w "am"
i am a boy
AB12 $ echo "i am a boy" | egrep -o "am"
egrep: illegal option -- o
usage: egrep [ -bchilnsv ] [ -e exp ] [ -f file ] [ strings ] [ file ] ...
AB12 $ echo$
ksh: echo$: not found
AB12 $ echo $SHELL
/bin/ksh
AB12 $ echo "i am a boy" | grep -o …
Run Code Online (Sandbox Code Playgroud)

unix grep solaris

17
推荐指数
2
解决办法
4万
查看次数

Linux - 只查找一行内的模式,而不是整行

我想使用正则表达式在文件中查找模式.那个模式可能在一条线的中间,但我不想要整条线.我试过grep -a pattern file但这会返回包含正则表达式的整行.以下是我正在尝试做的一个例子.有谁知道这样做的方法?

例:

输入: AAAAAAAAAAAAAXxXxXxXxBananasyYyYyYyYBBBBBBBCCCCCC

正则表达式: Xx.*yY

输出继电器: XxXxXxXxBananasyYyYyYyY

regex linux bash

10
推荐指数
2
解决办法
298
查看次数

如何终端输出命令管道到grep的输入并使用正则表达式?

我以为在OSX或Linux上获得IP地址将很容易学习如何在grep中使用正则表达式,但是看起来我可能有语法错误或对所需内容的误解。

我知道这个正则表达式是正确的,尽管我知道它可能不是有效的IP地址,但目前我还没有考虑。

(\d{1,3}\.){3}\d{1,3}
Run Code Online (Sandbox Code Playgroud)

所以我不确定为什么这行不通。

ifconfig | grep -e "(\d{1,3}\.){3}\d{1,3}"
Run Code Online (Sandbox Code Playgroud)

regex grep pipe

5
推荐指数
1
解决办法
1万
查看次数

仅将正则表达式替换为捕获的组

我试图理解为什么以下内容没有给我我认为(或想要:))应该返回的内容:

sed -r 's/^(.*?)(Some text)?(.*)$/\2/' list_of_values
Run Code Online (Sandbox Code Playgroud)

或 Perl:

perl -lpe 's/^(.*?)(Some text)?(.*)$/$2/' list_of_values
Run Code Online (Sandbox Code Playgroud)

所以我希望我的结果只是,Some text否则(意味着如果 中没有捕获任何内容$2)那么它应该是 EMPTY 。

我确实注意到,对于perl,如果位于行/字符串的开头,它确实可以工作(这让我感到困惑......)。Some text(还注意到删除^并$没有效果)

基本上,我试图获取此处讨论的选项grep会返回什么。只有我想要/需要在正则表达式中使用 sub/replace 。--only-matching

编辑(添加示例数据)

输入示例:

$ cat -n list_of_values
     1  Black
     2  Blue
     3  Brown
     4  Dial Color
     5  Fabric
     6  Leather and Some text after that ....
     7  Pearl Color
     8  Stainless Steel
     9  White
    10 …
Run Code Online (Sandbox Code Playgroud)

regex perl sed regex-group

0
推荐指数
1
解决办法
1729
查看次数

Unix命令grep只有一个以"xyz ...."开头的子字符串直到第一个空格?

我有一个文字:

这是我的= test和class = 76

这是我的= test和class = 78

这是我的= test2和class = 76

这是我的= test3和class = 75

这是我的= test1和class = 79.

我想grep所有以"class ="开头的单词,而不打印输出应该是整行的值:

class=76
class=78
class=76
class=75
class=79
Run Code Online (Sandbox Code Playgroud)

任何可以帮助我的命令?

我试过这个:

grep -E '(^|\s+)class=(?=\s|$)' file
Run Code Online (Sandbox Code Playgroud)

但没有得到任何输出.

regex unix grep

0
推荐指数
1
解决办法
42
查看次数

标签 统计

regex ×5

grep ×4

sed ×2

unix ×2

bash ×1

cat ×1

command-line ×1

linux ×1

perl ×1

pipe ×1

regex-group ×1

shell ×1

solaris ×1