Apologies... Code that I shared earlier is incorrect, revising...
修改后的问题:
首先,我想为仓促道歉,我是 QSHELL 的新手,刚刚开始学习..但是我非常需要你的帮助,因为我需要尽快将以下内容集成到我的程序中..
基本上情况是,包含无效/特殊字符的文本文件被上传到我们的服务器中,我的程序必须在处理之前删除它们。
例如,我有 uploadfile.txt 它包含以下内容。
为了替换特殊字符,我使用以下命令,它工作正常。
sed -e 's/[^a-zA-Z0-9&,-]/ /g' uploadfile.txt > outputfile.txt
a to z
小写 (az)A to Z
大写 (AZ)0-9
&
和符号,
逗号.
时期
然而,在替换之前,我需要提取用于报告/通信目的的行,我不太确定如何并被卡住了...尝试搜索,但我仍然无法得到它,而且我已经没有时间了..
所以我的问题是,如何将行号 2、4、5 提取到单独的 text.file 中?
提前致谢。
这已经解决了,我按照@adminbee 在评论中的建议使用了以下命令。
sed -n '/[^[:print:]]/p' IFS/MM4R5FLR/S06013/myfile.POL > myfile.pol
谢谢大家的帮助。
答案1
如果两阶段方法可以,那么您可以首先grep
将所有包含非法字符的行提取到文件中,然后使用sed
命令进行实际替换。
请注意,由于您的目的是摆脱特殊(即“不可打印”字符),因此您可以尝试使用 POSIX 字符类[:print:]
而不是枚举字符(如果您的grep
/sed
理解这些字符)。
所以,你可以先使用
grep '[^[:print:]]' uploadfile.txt > invalid_lines.txt
提取所有包含非法字符的行以用于存档目的,然后执行
sed -e 's/[^[:print:]]/ /g' uploadfile.txt > outputfile.txt
或者,如果您绝对确定,请通过以下方式执行就地编辑
sed -i -e 's/[^[:print:]]/ /g' uploadfile.txt
将它们从文件中清除。
答案2
来自sed 文档(“通过文本匹配选择行”),您可以同样选择行:
# First, report lines
sed -n '/[^a-zA-Z0-9&,-]/p' uploadfile.txt > reportfile.txt
# Then, correct and output text
sed -e 's/[^a-zA-Z0-9&,-]/ /g' uploadfile.txt > outputfile.txt
其中该-n
选项只会输出“p”命令打印的内容,即由您的正则表达式选择的整行。