是否有 unix 命令可以检查文件中的任何两行是否相同?
例如考虑一个文件 sentences.txt
This is sentence X
This is sentence Y
This is sentence Z
This is sentence X
This is sentence A
This is sentence B
Run Code Online (Sandbox Code Playgroud)
我们看到这句话
This is sentence X
Run Code Online (Sandbox Code Playgroud)
重复。
是否有任何命令可以快速检测到这一点,以便我可以像这样执行它 -
$ cat sentences.txt | thecommand
Line 1:This is sentence X
Line 4:This is sentence X
Run Code Online (Sandbox Code Playgroud) 我用开在Ubuntu终端Ctrl+ Alt+ T,并通过进入到一个目录,然后右击并选择“打开在终端”不同的终端。
我echo $0
在这两种情况下都做了。
在第一种情况下:
$ echo $0
-bash
Run Code Online (Sandbox Code Playgroud)
在第二种情况下:
$ echo $0
/bin/bash
Run Code Online (Sandbox Code Playgroud)
为什么会有这种差异?
假设我做一个递归 ls
$ ls -R
Run Code Online (Sandbox Code Playgroud)
在根目录上。
我收到很多这样的消息——
ls: cannot open directory ./var/lib/sendmail: Permission denied
ls: cannot open directory ./var/lib/sudo: Permission denied
...
Run Code Online (Sandbox Code Playgroud)
有没有办法避免显示上述“ cannot open directory
”消息?
假设我这样做
grep "MyVariable = False" FormA.frm
... result1
grep "MyVariable = True" FormA.frm
... result2
Run Code Online (Sandbox Code Playgroud)
如何编写 grep 命令以便我可以说类似的话
grep "MyVariable = False" OR "MyVariable = True" FormA.frm
Run Code Online (Sandbox Code Playgroud) xclip
/xsel
是允许您将剪贴板输出通过管道传输到 Ubuntu 上的 shell 的实用程序。不幸的是,它们似乎无法与wc
命令结合使用。
尝试这个。打开一个新文件并输入:
this is a line
Run Code Online (Sandbox Code Playgroud)
不按行尾的回车键。
现在,复制此文本并尝试以下操作:
$ xsel -o | wc -l
0
Run Code Online (Sandbox Code Playgroud)
输出是 0,而实际上它应该是 1。保存文件(调用它myfile.txt
)。
现在尝试:
$ cat myfile.txt | wc -l
1
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,输出为 1。
为什么在第一种情况下输出为 0?
我有一个名为dictionary.txt的巨大文本文件,其中包含以下条目
ABC_SEQ_NUM This represents....
ABC_RANK This represents....
ABC_BSC_ID This represents...
PQR_TA_DATE_AF This represents...
XYZ_C_ID This represents...
Run Code Online (Sandbox Code Playgroud)
在另一个文件中,我有一个程序的源代码,该程序使用其中一些缩写作为其变量名称的一部分。变量名经常使用上面的条目如下
Facilitator.TMP_ABC_SEQ_NUM
Run Code Online (Sandbox Code Playgroud)
所以我无法简单地使用 grep 搜索 TMP_ABC_SEQ_NUM,因为它不会返回任何匹配项。但是,变量名称的最后部分(“ABC_SEQ_NUM”)实际上存在于文本文件中。
所以我想说的是
grep (longest match for) TMP_ABC_SEQ_NUM in dictionary.txt
Run Code Online (Sandbox Code Playgroud)
这样它就会返回匹配项
ABC_SEQ_NUM
Run Code Online (Sandbox Code Playgroud)
这样的命令怎么写呢?
据我了解,命名管道不会写入磁盘,而是存储在内存中。这是我创建命名管道的方式 -
$ mkfifo pipe21
$ grep "simple" SimpleDoc.txt > pipe21 &
[1] 2775
$ cat pipe21
Very simple doc that contains plaintext.
[1]+ Done grep --color=auto "simple" SimpleDoc.txt > pipe21
Run Code Online (Sandbox Code Playgroud)
在此之后,我重新启动了我的系统。但是,即使在重新启动后,我在当前目录中也看到了 pipe21。这是为什么?
我有一个脚本,我想用它来打开新终端并在其中键入命令。像这样的命令
gnome-terminal
Run Code Online (Sandbox Code Playgroud)
打开一个新终端。
另外,如果我这样做
gnome-terminal -e myprogram1
Run Code Online (Sandbox Code Playgroud)
它将在新打开的终端中执行 myprogram1。但是,如果在 myprogram1 完成后,我想执行 myprogram2 怎么办?我不能做类似的事情
gnome-terminal -e myprogram2
Run Code Online (Sandbox Code Playgroud)
因为它会打开一个新的终端。
有没有在这我要执行这两个脚本以指定的方式myprogram1
,并myprogram 2
在同一个新的终端?或者我是否必须创建一个新脚本并执行类似的操作
gnome-terminal -e scriptToExecuteMyPrograms1And2
Run Code Online (Sandbox Code Playgroud) 假设我做了一个grep
给我很多结果的。我想使用 grep 的输出并将其传递给一个将文件名作为第一个参数的命令。例如 -
myCommand filename.txt
Run Code Online (Sandbox Code Playgroud)
我想做这样的事情 -
grep "xyz" | myCommand
Run Code Online (Sandbox Code Playgroud)
However, since myCommand doesn't read from stdin, this piping does not work. I don't want to create a temporary file on disk with the results of grep. Is it possible by any other means to create a "file", say in memory and let myCommand
use that?
我正在使用以下命令但没有成功 -
$ google-chrome <(grep "simple" SimpleDoc.txt)
Run Code Online (Sandbox Code Playgroud)
如果我只是做 a grep
,我会得到 -
$ grep "simple" SimpleDoc.txt
Very simple doc that contains plaintext.
Run Code Online (Sandbox Code Playgroud)
我还写了一个 python 脚本showFileContents.py
来测试进程替换,它可以工作 -
#! /usr/bin/python
import sys
arg1 = sys.argv[1]
f = open(arg1)
line = f.readline()
while line:
sys.stdout.write(line)
line = f.readline()
f.close()
Run Code Online (Sandbox Code Playgroud)
这是输出 -
$ showFileContents.py <(grep "simple" SimpleDoc.txt)
Very simple doc that contains plaintext.
Run Code Online (Sandbox Code Playgroud)
但是当我尝试做同样的事情时
$ google-chrome <(grep "simple" SimpleDoc.txt)
Run Code Online (Sandbox Code Playgroud)
浏览器窗口什么也没显示。使用 Firefox,我收到一条错误消息,提示“Firefox 找不到文件”。
为什么会发生这种情况以及如何使用 chrome 进行进程替换?