这可能是许多常见问题解答 - 而不是使用:
cat file | command
Run Code Online (Sandbox Code Playgroud)
(这被称为无用的猫),正确的方式应该是:
command < file
Run Code Online (Sandbox Code Playgroud)
在第二,"正确"的方式 - 操作系统不必产生额外的过程.
尽管知道这一点,我继续使用无用的猫有两个原因.
更美观 - 我喜欢数据仅从左到右均匀移动.而且它更容易更换cat别的东西(gzcat,echo,...),添加第二个文件或插入新的过滤器(pv,mbuffer,grep...).
我"觉得"在某些情况下可能会更快.更快,因为有2个进程,1st(cat)执行读取而第二个执行任何操作.它们可以并行运行,这意味着有时可以更快地执行.
我的逻辑是否正确(第二个原因)?
我有一个多行文档,我希望从中提取一个特定的关键字和之后的单词.它看起来像这样:
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)
有没有办法做到这一点?
我熟悉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) 我想使用正则表达式在文件中查找模式.那个模式可能在一条线的中间,但我不想要整条线.我试过grep -a pattern file但这会返回包含正则表达式的整行.以下是我正在尝试做的一个例子.有谁知道这样做的方法?
例:
输入: AAAAAAAAAAAAAXxXxXxXxBananasyYyYyYyYBBBBBBBCCCCCC
正则表达式: Xx.*yY
输出继电器: XxXxXxXxBananasyYyYyYyY
我以为在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) 我试图理解为什么以下内容没有给我我认为(或想要:))应该返回的内容:
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) 我有一个文字:
这是我的= 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)
但没有得到任何输出.