如何从sed输出中删除不可见字符到文件[重复]

Posted

技术标签:

【中文标题】如何从sed输出中删除不可见字符到文件[重复]【英文标题】:How to remove non visible characters from sed output to a file [duplicate] 【发布时间】:2021-08-31 13:58:09 【问题描述】:

我正在尝试列出另一个目录中的所有目录并使用 sed 将其放入文件中。

使用的命令:

ls -ld <directory path>/* | sed 's/^.*\(what.*\).*\//\1/'

它在终端上打印的内容:

what_111
what_222

当我将它放到文件中时,我看到的是:不可见的字符被放入文件中。

what_111^[[0m^[[K
what_222^[[0m^[[K

如何在放入文件时从 sed 输出中删除它们?任何 cmets 都会有所帮助。

【问题讨论】:

superuser.com/questions/380772/… 是的,它确实可以使用以下命令:ls -ld /* | sed -u 's/^.*(test.*).*\//\1/' | sed -u 's/\x1b[[0-9;]*[a-zA-Z]//g' 这在终端上工作正常,但是当我把它放在 shell 脚本上时,sed 不起作用。有什么问题吗? 不解析ls。为什么你用ls 然后去掉颜色?只是不要使用 ls.... 你在问 XY 问题。 on the text file 不,ls 输出。 filename 本身是否包含不可打印的字符或ls 是否输出它们? When I put it onto a file你如何“把它放到一个文件中”? Un-visible characters getting put onto file.如何检查文件内容? I see 你几乎从不接受答案。请阅读***.com/help/someone-answers。 【参考方案1】:

您似乎开始走错了路(尝试解析 ls 的输出,我敢打赌,ls 别名为 ls --color)然后尝试添加代码来解决问题你这样做造成的。要列出目录下的目录名称,只需这样做:

find /path/to/directory -maxdepth 1 -type d -printf '%P\n'

【讨论】:

【参考方案2】:

我正在尝试列出另一个目录中的所有目录并使用 sed 将其放入文件中。

sed 无法做到这一点 - sed 是“流编辑器”,它不能列出目录。

Do not parse ls..

find 目录。

find another_directory/ -maxdepth 1 -mindepth 1 -type d > a_file

【讨论】:

但是上面的这个命令会打印目录的整个路径。我只想在另一个目录中单独打印目录的名称[不是完整的分层路径],也不是在另一个目录中打印所有子目录。 find ... -printf '%f\n'man find。或find ... | sed 's~.*/~~'。或cd another_directory; find . .... | cut -c3- 试过.. 喜欢.. find / -maxdepth 1 -type d |sed "s/^.*(test.*).*\//\1/" 但仍然sed 不会在测试之前删除所有细节,但相同的 sed 可以与 ls 输出一起使用。【参考方案3】:

尝试结合上面的一些响应并使其正常工作。以下是我尝试过的命令及其工作。

find <directory path> -maxdepth 1 -type d | sed 's/^.*\(test.*\)/\1/g' |tail -n +2 > file_list.txt

【讨论】:

以上是关于如何从sed输出中删除不可见字符到文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

UTF 8 String 删除除换行符以外的所有不可见字符

通过 Bash 从文本文件中删除空行,包括空格字符 [重复]

如何从集合视图中的不可见单元格中删除自定义视图

如何从 MaterialDesignXamlToolkit 中删除 ComboBox 控件中的装饰器可见性?

文件加密(环)

在文件中搜索字符串并通过 Shell 脚本将其从该文件中删除 [重复]