我有一个简单的问题。
bash(我使用的是 4.4.11)不显示分隔/以纯文本结尾的行/文本是否正常\r
?
看到这种行为,我有点惊讶:
$ a=$(printf "hello\ragain\rgeorge\r\n")
$ echo "$a"
george
Run Code Online (Sandbox Code Playgroud)
但是“你好再次”文本仍然存在,不知何故“隐藏”:
$ echo "$a" |od -w32 -t x1c
0000000 68 65 6c 6c 6f 0d 61 67 61 69 6e 0d 67 65 6f 72 67 65 0d 0a
h e l l o \r a g a i n \r g e o r g e \r \n
Run Code Online (Sandbox Code Playgroud)
只要我们玩 bash 就可以了……但这是否存在潜在的安全风险?如果变量“a”的内容来自外部世界并包含“坏命令”而不是“你好”怎么办?
另一个测试,这次有点不安全:
$ a=$(printf "ls;\rGeorge\n")
$ echo "$a"
George
$ eval "$a"
0 awkprof.out event-tester.log helloworld.c …
Run Code Online (Sandbox Code Playgroud) 冒着提出可能已经有答案的问题的风险,我想问一下是否有人知道是否以及如何阅读我的终端中未使用在线资源安装在我的系统中的程序/应用程序的手册页/在线工具。
我进行了 stackexchange 和 google 搜索,但没有发现有关此问题的任何信息。
例如,man grep
将按预期提高 grep 手册。另一方面,man agrep
由于agrep
未安装,会出现错误。为了阅读agrep manual
我必须google agrep man pages
得到这样的结果:https : //linux.die.net/man/1/agrep
PS:顺便说一句,http: //man7.org/linux/man-pages/dir_all_alphabetic.html 不提供 agrep对我来说似乎很奇怪...
我想知道是否可以man agrep
从我的终端运行或类似的命令(不安装 agrep)并像往常一样在终端中阅读 agrep 手册页。
我不希望世界上所有的手册页都在本地可用;我只是想知道是否有任何棘手的方法可以使用 man(甚至其他命令)来搜索和显示未安装 prog 的手册页,而无需打开浏览器、键入关键字、在结果中搜索等。
PS:正如 Kusalananda 所注意到的,提出 Web 查询可能会导致结果不适合特定发行版(不同版本的结果会弹出)。所以最好的(在我的梦想中)是如果有一种特定于发行版的(在我的情况下是 Debian)内部/内置命令(甚至是一个开关)可以专门为我的设置检索在线手册页(即类似:man --online agrep
或onlineman agrep
)。似乎没有。
有没有办法对具有以下内容的文件进行分类:
field1,field2,field number 3,field4,field5
field1,field2,field3,field4,field5
Run Code Online (Sandbox Code Playgroud)
(有些字段有空格,有些字段没有)
我想使用awk
$1 和 $3打印,但只打印字段 3 中没有空格的行。
我不知道是否有任何方法可以让 awk 仅在以 开头并以 结尾时打印某些内容,
我的终端中有一个奇怪的行为。
以下命令不会向我的终端打印任何内容:
comment=$(
cat /usr/share/applications/brasero.desktop |
grep '^Comment=' |
grep -Po '(?<=^Comment=)[ --0-9A-Za-z/.]*'
)
echo $comment
Run Code Online (Sandbox Code Playgroud)
完全相同的命令,相同的语法在 bash 脚本中完美运行。
通常,我看到人们抱怨相反的行为。
我知道上述操作可以通过数百种方式完成,但我不明白为什么上述命令在我的终端中没有运行。
另一方面,这些命令在终端和脚本中都可以正常工作:
comment=$(
cat /usr/share/applications/brasero.desktop |
grep -Po '(?<=^Comment=)[ --0-9A-Za-z/.]*'
)
echo $comment
grep -Po '(?<=Exec=)[ --0-9A-Za-z/:space:]*' > /usr/share/applications/brasero.desktop
Run Code Online (Sandbox Code Playgroud)
我在 Debian 8 Sid 下使用 GNU bash,版本 4.4.0(1)-release (x86_64-pc-linux-gnu),grep (GNU grep) 2.26。我在 xfce 和 mate 终端都尝试过,但行为相同。
谢谢
我经常对这个简单的命令感到沮丧:
find / | fgrep somestuff.ext
Run Code Online (Sandbox Code Playgroud)
当我不使用时sudo
,我会得到一行又一行的拒绝权限——这很公平,但是当 grep 从管道读取它时,为什么没有忽略这个输出?
为什么这种形式的输出直接发送到终端窗口而不是传递到管道中(我怀疑必须发生这种情况)并随后被 grep 忽略,而 cat 生成的相同行(比如我有权限被拒绝的消息存储在文本中)文件)会正确进入管道并被我的 grep 模式忽略?
我觉得这里有一些关于 STDIN/STDOUT 过程的东西我不明白