对于这个简单的问题感到抱歉,但我在学习和尝试的四天中失明了,似乎无法使用正确的语法。Cygwin sed:使用十六进制,八进制或十进制搜索/替换一个不可打印的字符
在cygwin上使用sed,我试图用另一个不可打印的字符替换一个不可打印的ASCII字符。
这里是我的源文件,使用大写文字[方括号内]表示不可打印的ASCII字符:
myfile.txt:
line one[LF]
line two[LF]
line three[LF]
[SUBSTITUTE][LF]
line four{LF]
line five[LF]
line six[LF]
.
.
.
我想用标签来代替LF类。
由于LF类的十六进制0A和标签是十六进制09我都试过了,基本做法是:
sed -i 's/\x0A/\x09/g' myfile.txt
这改变不了什么的文件中。
当然,我已经尝试了不同的开关,如-b,-e和-r,带括号和不带,带和不带/ g,额外的反斜杠和无反斜杠,八进制和十进制符号,一路到精灵符文,绝对没有成功。
我读了一些使用'回声'而不是文件作为源的答案,他们只是困惑我,并没有工作。
其他例子使用'作弊'像实际的单词TAB,但他们阻止我学习使用数字的语法,所以我可以将它应用于其他不可打印的字符,而不仅仅是TAB。
当我尝试的 '文件' 命令,我得到:
file myfile.txt
file.txt: data
所以,当然我想:
sed -i -t UTF-8 's/\x0A/\x09/g' myfile.txt
但我的sed不支持该功能-t选项。
当我试试这个:
oc -c myfile.txt
的[LF]字符我在寻找表现为:
\n
我也曾尝试\ 0D作为我的搜索词,没有运气无论是。
如果有人想通过显示正确的语法给我一个线索,我将非常感激。
谢谢。
谢谢,但TR不能做到就地更换。我认为cygwin sed不是真的可能吗? – 2013-03-22 20:40:08
我不知道;我会用'tr'而不用担心。既然你通过删除换行符来压扁文件,我会担心使用面向行的'sed'。为什么这是“现场”完成的关键?你确定'sed'确实'有'的地方有足够的差异吗? – 2013-03-22 21:11:12
我不只是想要一条鱼。我正在学习捕鱼。换句话说,我正在学习sed。我的计划要求工作要在原地完成。 sed可以搜索和替换另一个不可打印的ascii字符吗? – 2013-03-22 21:51:42