Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 如何grep信息?_Shell_Grep - Fatal编程技术网

Shell 如何grep信息?

Shell 如何grep信息?,shell,grep,Shell,Grep,我所拥有的: test more text @user653434 text and so test more text @user9659333 text and so 我想筛选此文本,最后以.txt文件的形式获得以下列表: user653434 user9659333 获取不带“@”符号的名称很重要。 Thx寻求帮助;) 使用GNU grep: grep -Po '^@\K[^ ]*' file 输出: user653434 user9659333 用户653434 用户96593

我所拥有的:

test
more text
@user653434 text and so


test
more text
@user9659333 text and so
我想筛选此文本,最后以.txt文件的形式获得以下列表:

user653434
user9659333
获取不带“@”符号的名称很重要。 Thx寻求帮助;)

使用GNU grep:

grep -Po '^@\K[^ ]*' file
输出:

user653434 user9659333 用户653434 用户9659333
请参阅:

带GNU grep:

grep -Po '^@\K[^ ]*' file
输出:

user653434 user9659333 用户653434 用户9659333

请参阅:

使用
grep-p
(需要GNU
grep
):

使用sed 并且,要就地更改文件,请执行以下操作:

sed -En -i.bak 's/^@([[:alnum:]]+).*/\1/p' File
-E
告诉sed使用正则表达式的扩展形式。这减少了使用逃逸的需要

-n
告诉sed不要打印任何东西,除非我们明确要求

-i.bak
告诉sed在保留扩展名为
.bak
的备份文件时更改文件

s/^@([[:alnum:]+])./\1/p
中的前导
s
告诉sed我们正在使用替换命令。该命令的典型形式是
s/old/new/
,其中
old
是一个正则表达式,sed将
old
替换为
new
。后面的
p
是替换命令的一个选项:
p
告诉sed打印结果行

在我们的例子中,
old
部分是
^@([[:alnum:]+]).
。从行的开头开始,
^
,这匹配
@
后跟一个或多个字母数字字符,
([[:alnum:]+)
,后跟任何字符,
*
。由于字母数字字符放在括号中,因此将其保存为一个组,表示为
\1

替换命令的
new
部分只是
\1
,上面的字母数字字符构成用户名


这里,
s
表示我们正在使用sed-substitute命令。使用
grep-p
(需要GNU
grep
)的常用形式:

使用sed 并且,要就地更改文件,请执行以下操作:

sed -En -i.bak 's/^@([[:alnum:]]+).*/\1/p' File
-E
告诉sed使用正则表达式的扩展形式。这减少了使用逃逸的需要

-n
告诉sed不要打印任何东西,除非我们明确要求

-i.bak
告诉sed在保留扩展名为
.bak
的备份文件时更改文件

s/^@([[:alnum:]+])./\1/p
中的前导
s
告诉sed我们正在使用替换命令。该命令的典型形式是
s/old/new/
,其中
old
是一个正则表达式,sed将
old
替换为
new
。后面的
p
是替换命令的一个选项:
p
告诉sed打印结果行

在我们的例子中,
old
部分是
^@([[:alnum:]+]).
。从行的开头开始,
^
,这匹配
@
后跟一个或多个字母数字字符,
([[:alnum:]+)
,后跟任何字符,
*
。由于字母数字字符放在括号中,因此将其保存为一个组,表示为
\1

替换命令的
new
部分只是
\1
,上面的字母数字字符构成用户名


这里,
s
表示我们正在使用sed-substitute命令。通常的形式是名称总是以
@
开头,文件中唯一以
@
开头的信息是吗?是:)它总是以@开头,文本中没有更多@,刚开始。名称是否总是以
@
开头,并且是文件中唯一以
@
开头的信息?是:)它总是以@开头,文本中没有更多@。最后,如何用新输出覆盖文件?:]@hannir:use GNU
sed
@hannir我用信息更新了答案,用
grep
和Cyrus建议的
sed
覆盖文件。最后,如何用新输出覆盖文件?:]@hannir:use GNU
sed
@hannir我用信息更新了答案,以便用
grep
和Cyrus建议的
sed
覆盖文件。