标签: grep

如何在单个 grep 命令中同时使用 AND 和 NOT

我正在创建一个 shell 脚本,其中,我需要过滤除自己的 grep 进程之外的进程。如果我使用:

echo "step1"
psout=`ps -aux | grep 'deluged'| grep '58846'`
echo "step2"
echo $psout       
...
Run Code Online (Sandbox Code Playgroud)

然后停止脚本意味着step2不显示!和 $psout,输出空白。我不知道为什么。

如果我尝试使用 AND 和除了color

$ ps -aux | grep -e 'deluged' -e '58846' -v "color"
grep: color: No such file or directory
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用钥匙串:

ps -aux | grep -e "[d]eluged"."58846"

Blank OUTPUT
Run Code Online (Sandbox Code Playgroud)

简而言之,如何使用 AND 和除了自己的 grep 进程之外的单个 grep 查找进程?

command-line bash grep 14.04

2
推荐指数
1
解决办法
490
查看次数

Linux Shell中的“bash:意外的语法错误')”

我正在寻找引号内的字符串,其中 Linux 一词出现在位于引号内某处的括号之间。我必须使用正则表达式来做到这一点。我需要在 Linux 操作系统中执行此操作(使用 Virtual Box Terminal)。我使用了以下正则表达式:

 egrep "\"([^"]*)?\(([^"]*)?Linux([^"]*)?\)([^"]*)?\"" [FILE]
Run Code Online (Sandbox Code Playgroud)

但问题是,我明白了

bash: syntax error near unexpected token '("
Run Code Online (Sandbox Code Playgroud)

每次。可能是什么问题?我在“ http://regexr.com/ ”中尝试了这个正则表达式,它工作正常,正则表达式没有任何问题。但是 Linux shell 总是会产生同样的问题......我在括号前使用了“\”,因为它们是元字符。我在双引号前面做的同样的事情......但它不起作用。有人可以帮我吗?

command-line bash regex grep

2
推荐指数
1
解决办法
8985
查看次数

Grep排除通配符不起作用

我正在使用 Ubuntu 14.04 LTS。

我正在玩 grep,我遇到了一个问题,将 grep 管道传递到 ls。所有示例仅限于当前目录,非递归。

如果我想列出名称中包含数字的所有文件:

ls | grep [0-9]
Run Code Online (Sandbox Code Playgroud)

如果我想列出所有包含“d”、“h”、“m”作为首字母的文件:

ls | grep ^[dhm]
Run Code Online (Sandbox Code Playgroud)

如果我想列出所有包含数字作为首字母的文件:

ls | grep ^[0-9]
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用!inside 时[]!不包括:

user@host:~$ ls | grep [0-9]
1.log
2.log
3.log
hs_err_pid4015.log
Untitled 1.odt
v1.odt

user@host:~$ ls | grep [!0-9]
1.log
2.log
3.log
hs_err_pid4015.log
Untitled 1.odt
v1.odt
Run Code Online (Sandbox Code Playgroud)

如果我尝试将它与 ^

user@host:~$ ls | grep ^[0-9]
1.log
2.log
3.log

user@host:~$ ls | grep ^[!0-9]
1.log
2.log
3.log
Run Code Online (Sandbox Code Playgroud)

我花了几天时间阅读有关 grep 和通配符的其他帖子、手册页、文章等,但我无法弄清楚。我试过把它们放在'and 中 …

command-line regex grep wildcards

2
推荐指数
1
解决办法
2765
查看次数

从两个匹配模式之间的文件中提取内容(仅从文件中提取 HTML)

我有包含不同类型文本格式的文件,我的目标是仅提取 HTML 部分并使用此 HTML 代码创建一个文件。我认为使用grepor是可能的awk。我的文件还包含这样的行:

Sender name `<test@email.com>`
Run Code Online (Sandbox Code Playgroud)

我写了这个脚本cat file1.html | grep -E "<[^>]*>"。但问题是它也将行输出为Sender name等。我只想在<html>标签之后提取内容。所以这对我没有用:

Return-Path: <test@test.com>
    for <test@localhost> (single-drop); Thu, 21 Sep 2017 18:34:07 +0400 (+04)
Return-path: <test@test.com>
    (envelope-from <test@test.com>)
References: <test@test.com>
From: test user <test@test.com>
X-Forwarded-Message-Id: <test@test.com>
Message-ID: <test@test.com>
In-Reply-To: <test@test.com>
Run Code Online (Sandbox Code Playgroud)

bash scripts grep awk

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

如何仅在您所在的文件夹中执行“grep”

所以说我在 /home/folder1 中,它包含很多 .txt 文件。如果我想使用grep -r "xxx" ___,我将如何使 ___ 表示我只希望 grep 命令查看我所在的文件夹?

command-line grep

2
推荐指数
1
解决办法
1339
查看次数

如何使用 while 循环逐行读取文件中的行,并在每次迭代中,grep 每一行以与字符串进行比较?

我有一个名为 abc.txt 的文件,其内容如下:

1: It is a shell script
2: There are few lines in this file
3: I am good with programming in C, but beginner in shell
4: We are going towards end of file
5: END OF FILE
Run Code Online (Sandbox Code Playgroud)

我想迭代地读取每个文件,并且在每次迭代中,我想将这行与“我擅长 C 编程,但初学者在 shell 中”进行比较,然后进行一些处理。

任何帮助将不胜感激。谢谢!

command-line grep

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

如何使用 grep 匹配带有空格的字符串?

谁能帮我这个:

我试图通过匹配字符串来提取时间戳。为此,我使用了 grep/awk 命令的组合。由于刺痛在 [1] 之前有 4 个 spces,在 [1] 之后有 1 个,我很困惑如何解决它。我是编程新手,所以在这里需要一些帮助。

IS="$(grep 'Starting    [1] TaskInit' process.log |  awk '{print $4}')"
echo "$IS"
Run Code Online (Sandbox Code Playgroud)

目的:它应该匹配 process.log 文件中的字符串,并且应该打印出与该行相关的时间戳。

command-line bash grep awk

2
推荐指数
1
解决办法
4905
查看次数

如何在 grep 中使用字符串变量(包含双引号)

我有以下 bash 代码:

DNS_RECORD_NAME="\"_acme-challenge\""
linode-cli domains records-list 1020562 --pretty --json |
            grep '"name": $DNS_RECORD_NAME'
Run Code Online (Sandbox Code Playgroud)

输出应该是这样的:

"name": "_acme-challenge"
Run Code Online (Sandbox Code Playgroud)

但我得到了空的结果。如果我更改以下行

grep '"name": $DNS_RECORD_NAME" 
Run Code Online (Sandbox Code Playgroud)

grep '"name": "_acme-challenge"'
Run Code Online (Sandbox Code Playgroud)

我得到了正确的输出。

但我需要使用变量。如何在 grep 中使用字符串变量(包含双引号)?

bash grep

2
推荐指数
1
解决办法
333
查看次数

如何在文件中搜索单词,同时显示整个文件以及找到的单词?

我正在使用 Ubuntu 16.04。

我想搜索某个词,但我也希望在终端上输出包含该词的整个文件,以便我可以看到该词在文件中的位置。但是,当我使用 时grep,它只会显示包含该单词的特定句子,而不是整个文件。

我可以使用什么命令来搜索一个单词,同时还可以显示整个文件以及该单词所在的位置?

command-line bash grep

2
推荐指数
1
解决办法
1129
查看次数

需要将使用 grep 找到的文件移动到文件夹中

作为大学课程的一部分,我试图在 500 个文件的列表中隐蔽地搜索一个字符串,然后将找到的这些项目复制到一个新文件夹中。

我可以毫无问题地找到文件

grep -rnw '/home/steve/Desktop.CEDFOR.arnold-j/sent/' -e 'vladimir.gorny@enron.com'
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将结果通过管道传送到名为 Suspicious 的文件夹时,它会出错。

我正在使用的完整代码(基于几年前报告的类似问题)是

grep -rnw '/home/steve/Desktop.CEDFOR.arnold-j/sent/' -e 'vladimir.gorny@enron.com' | xargs -0 cp -t /home/steve/Desktop/CEDFOR/arnold-j/Suspicious/
Run Code Online (Sandbox Code Playgroud)

但是,错误指出不存在此类文件夹或文件。我可以确认文件夹 /home/steve/Desktop/CEDFOR/arnold-j/Suspicious/ 肯定存在。

澄清...我想将文件复制到“可疑”文件夹中,以便稍后查看。

我哪里错了?

grep xargs

2
推荐指数
1
解决办法
305
查看次数

标签 统计

grep ×10

command-line ×7

bash ×6

awk ×2

regex ×2

14.04 ×1

scripts ×1

wildcards ×1

xargs ×1