![使用 sed 复制特定类型的字符](https://linux22.com/image/124637/%E4%BD%BF%E7%94%A8%20sed%20%E5%A4%8D%E5%88%B6%E7%89%B9%E5%AE%9A%E7%B1%BB%E5%9E%8B%E7%9A%84%E5%AD%97%E7%AC%A6.png)
通过使用 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