我刚刚学会了一个使用命令创建新文件的技巧cat
。通过我的测试,如果最后一行没有换行,我必须键入ctrl+d两次才能完成输入,如下所示。
[root@192 ~]# cat > test 一个 b ctrl+d[root@192 ~]# cat > test 一个 b ctrl+dctrl+d[root@192 ~]#
这是预期的吗?为什么会有这种行为?
运行此代码时:
while true; do printf "Match Unmatch\n"; sleep 1s; done | grep -o "Match"
在终端中,grep
找到单词Match
. 我得到输出:
Match
Match
Match
...
但是,当我运行以下代码时:
while true; do printf "Match Unmatch"; sleep 1s; done | grep -o "Match"
然后grep
似乎什么也没找到,至少它什么也没打印。grep 是否在等待永远不会出现的换行符?是否有某种方法可以在没有换行符的情况下在流中进行 grep、sed 或类似工具捕获匹配?
给定一个文本,
$ cat a.txt
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam at magna sed libero accumsan ultrices. Proin varius tortor risus, at pulvinar quam auctor
vitae.
Etiam iaculis ipsum quis lacus convallis finibus. Nunc fermentum, nunc sit amet egestas congue, odio quam sollicitudin velit, quis venenatis augue
nibh sed tortor.
我无法使用此命令删除双空行。
$ tr '\n\n' '\n' < a.txt
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam at magna sed libero accumsan ultrices. Proin varius tortor risus, at pulvinar quam auctor
vitae.
Etiam iaculis ipsum quis lacus convallis finibus. Nunc fermentum, nunc sit amet egestas congue, odio quam sollicitudin velit, quis venenatis augue
nibh sed tortor.
用其他 char 作品替换单个新行,是不是很奇怪?
我正在 linux 中开发一个可移植的应用程序,我想从一些源文件中删除尾随空格,这些文件具有 windows 样式的行结尾。行尾不应更改为 unix。
使用“sed”的代码很简单,可以在网上找到:
sed -i.bak -E 's/[[:space:]]+$//' myfile
问题是在操作之后,diff
文件中的所有行(以及生成的 .bak)都不同。这当然不可能。特定文件只有 1 行带有尾随空格。
使用 hexdump(我使用过od -x myfile
)实用程序进行检查,很明显原始文件的第一行以 "0d0a" 结尾,而在 sed 编辑的文件中,它以 "0a" 结尾。
我无法找到有关如何在不影响行尾的情况下执行尾随空格删除的任何信息。有办法吗?
如果“回车”字符是“[[:space:]]”正则表达式组的一部分,那么也许这个
sed -i.bak -E 's/[ \t]+$//' myfile
应该管用。但它没有 - 它创建一个相同的文件。我也尝试过“-e”标志,甚至根本没有标志。生成的文件仍然与原始文件相同,并且没有删除尾随空格。
我正在尝试编写一个命令来捕获 linux OS (kali) 中的每个许可证并将其与正确的包相关联。基本思想是递归地搜索 /usr/share/doc 以查找“版权”文件,然后搜索该文件并搜索主要许可证“^License”。每个包裹可以有多个。
我正在尝试创建一个 csv,它采用所有包名称并将它们放在每行的第一个字段中,然后在每个许可证逗号分隔的情况下跟随它。
我的基本流程:列出每个包(完成)。制作一个列表,其中每行是找到的许可证的 csv。然后只需粘贴文件 1 和文件 2,boom。
问题,我必须用逗号交换命令输出中的换行符,但是我需要在每次 xargs 迭代的末尾重新插入换行符,以便我的 csv 许可证将与包列表对齐。我已经尝试了几十种方法。当我进行命令替换时,它会中断翻译或回显(不再读\n
作换行符。我试过了\\n
,没有运气)。
这就是我所拥有的,只需要一种在每个 xargs 循环中放置换行符的方法。
find . -name copyright |xargs -l cat |grep "^License" |tr '\n' ','
因此,如果我可以\n
在每个 xarg 循环之后插入一些东西,我就完成了。我知道我可以用变量为此编写一个 for 循环。