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
(需要GNUgrep
):
使用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
(需要GNUgrep
)的常用形式:
使用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 GNUsed
@hannir我用信息更新了答案,用grep
和Cyrus建议的sed
覆盖文件。最后,如何用新输出覆盖文件?:]@hannir:use GNUsed
@hannir我用信息更新了答案,以便用grep
和Cyrus建议的sed
覆盖文件。