相关疑难解决方法(0)

何时在shell变量周围包装引号?

有人能告诉我是否应该在shell脚本中包含变量的引号?

例如,以下是正确的:

xdg-open $URL 
[ $? -eq 2 ]
Run Code Online (Sandbox Code Playgroud)

要么

xdg-open "$URL"
[ "$?" -eq "2" ]
Run Code Online (Sandbox Code Playgroud)

如果是这样,为什么?

unix linux bash shell quotes

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

如何从另一个文件A中删除文件B上出现的行?

我有一个大文件A(包含电子邮件),每封邮件一行.我还有另一个包含另一组邮件的文件B.

我将使用哪个命令从文件A中删除文件B中出现的所有地址.

所以,如果文件A包含:

A
B
C
Run Code Online (Sandbox Code Playgroud)

和文件B包含:

B    
D
E
Run Code Online (Sandbox Code Playgroud)

然后文件A应该留下:

A
C
Run Code Online (Sandbox Code Playgroud)

现在我知道这是一个可能经常被问到的问题,但我只在网上发现了一个命令错误的分隔符.

任何帮助将非常感激!有人肯定会想出一个聪明的单行,但我不是shell专家.

linux shell diff grep sed

144
推荐指数
6
解决办法
8万
查看次数

按行比较两个文件并从第一个文件中删除重复项

问题:

  1. 需要比较两个文件,
  2. 从第一个文件中删除重复项
  3. 然后将 file1 的行附加到 file2

举例说明

假设,这两个文件是 test1 和 test2。

$ cat test2
www.xyz.com/abc-2
www.xyz.com/abc-3
www.xyz.com/abc-4
www.xyz.com/abc-5
www.xyz.com/abc-6
Run Code Online (Sandbox Code Playgroud)

而 test1 是

$ cat test1
www.xyz.com/abc-1
www.xyz.com/abc-2
www.xyz.com/abc-3
www.xyz.com/abc-4
www.xyz.com/abc-5
Run Code Online (Sandbox Code Playgroud)

比较 test1 和 test2并从测试 1 中删除重复项

结果要求:

$ cat test1
www.xyz.com/abc-1
Run Code Online (Sandbox Code Playgroud)

然后将此 test1 数据添加到 test2

$ cat test2
www.xyz.com/abc-2
www.xyz.com/abc-3
www.xyz.com/abc-4
www.xyz.com/abc-5
www.xyz.com/abc-6
www.xyz.com/abc-1
Run Code Online (Sandbox Code Playgroud)

尝试的解决方案:

join -v1 -v2 <(sort test1) <(sort test2)
Run Code Online (Sandbox Code Playgroud)

这导致了这个(这是错误的输出)

$ join -v1 -v2 <(sort test1) <(sort test2)
www.xyz.com/abc-1
www.xyz.com/abc-6
Run Code Online (Sandbox Code Playgroud)

我尝试的另一个解决方案是:

fgrep -vf test1 test2 …
Run Code Online (Sandbox Code Playgroud)

unix bash grep

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

比较2个文件并删除file2中与file1中找到的值匹配的任何行

我有两个文件.我试图删除文件2中的任何行,当它们匹配file1中找到的值.一个文件有这样的列表:

文件1

ZNI008
ZNI009
ZNI010
ZNI011
ZNI012
Run Code Online (Sandbox Code Playgroud)

...超过19463行

第二个文件包含与第一个文件中列出的项匹配的行:File2

copy /Y \\server\foldername\version\20050001_ZNI008_162635.xml \\server\foldername\version\folder\
copy /Y \\server\foldername\version\20050001_ZNI010_162635.xml \\server\foldername\version\folder\
copy /Y \\server\foldername\version\20050001_ZNI012_162635.xml \\server\foldername\version\folder\
copy /Y \\server\foldername\version\20050001_ZNI009_162635.xml \\server\foldername\version\folder\
Run Code Online (Sandbox Code Playgroud)

...继续列出直到第51360行

到目前为止我尝试过的:

grep -v -i -f file1.txt file2.txt > f3.txt
Run Code Online (Sandbox Code Playgroud)

不会产生任何输出f3.txt或删除任何行.我通过跑步验证

wc -l file2.txt
Run Code Online (Sandbox Code Playgroud)

结果是

51360 file2.txt
Run Code Online (Sandbox Code Playgroud)

我相信原因是没有确切的匹配.当我运行以下内容时,它什么也没显示

comm -1 -2 file1.txt file2.txt
Run Code Online (Sandbox Code Playgroud)

运行

( tr '\0' '\n' < file1.txt; tr '\0' '\n' < file2.txt ) | sort | uniq -c | egrep -v '^ +1'
Run Code Online (Sandbox Code Playgroud)

只显示一场比赛,即使我可以清楚地看到有多场比赛.

或者将所有数据放入一个文件并运行以下命令:

grep -Ev "$(cat file1.txt)" 1>LinesRemoved.log …
Run Code Online (Sandbox Code Playgroud)

python bash awk grep sed

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

标签 统计

bash ×3

grep ×3

linux ×2

sed ×2

shell ×2

unix ×2

awk ×1

diff ×1

python ×1

quotes ×1