使用 sed 复制特定类型的字符

使用 sed 复制特定类型的字符

通过使用 sed(如果 sed 不支持函数,则使用 grep),我正在搜索如何仅复制文本文件特定行上的字母、点 (.)、空格和数字,并将 sed 输出发送到 var;我不想删去部分文字。

我希望 sed 只读取文本文件的指定行,并仅复制 az、AZ、0-9 字符和“.”符号。

通过浏览几个网页和SED的GNU man page: https://www.gnu.org/software/sed/manual/sed.html

我试图用这个命令来做到这一点:

NAME1=$(sed -n '1p' -e 's/.*\[:alpha:digit:blank:punct:]/`\1/p`' txtfile)

但我收到一条未真正清除的错误消息:

test.sh: 1: [: sed: unexpected operator

我不记得如何在 sed 命令中指示几种类型的“字符类和括号表达式”,而且我也不确定是否使用-n选项位置来指示 sed 它必须在文本的哪一行上工作。

我使用\1/p参数/选项来指示 sed 匹配的模式(如果 sed 找到某些内容)必须保留在原始文件中。

答案1

要从 POSIX 字符类和文字字符的串联构造字符范围,例如.您需要类似的内容

[[:alpha:][:digit:].]

并否定它

[^[:alpha:][:digit:].]

因此要删除(替换为空)所有字符除了字母数字、十进制数字和句点:

sed 's/[^[:alpha:][:digit:].]//g' somefile

相关内容