1

我有一个包含这一行的文件。

输入

sls="N" stnid="armID"
sls="N" stnid="C-ARM #11 w^Aw^Aw^A^Sg^Aw"
sls="N" stnid="virtualID"

对于我想要一个像这样的输出

sls="N" stnid="armID"
sls="N" stnid=""
sls="N" stnid="virtualID"

我想 sed "C-ARM #11 w^Aw^Aw^A^Sg^Aw" 并将其替换为空白。

问题是我找不到可以替换它的正则表达式。

我试过 sed -es//^//gs/A//g myfile > newfile。

它没有用。

另一个问题是,当我 CAT myfile 时,它​​没有显示 ^A 和 ^S 字符。文件看起来像这样。

sls="N" stnid="armID"
sls="N" stnid="C-ARM #11 wwwgw"
sls="N" stnid="virtualID"

请帮助,在此先感谢。

朋友

4

2 回答 2

1

^A 和 ^S 是不可打印的 ASCII 字符的文本表示。这些字符串实际上并不包含子字符串“^A”和“^S”。我相信 ^A 是 ascii 代码 1,而 ^S 是 19。要在 sed 输入中包含原始 ASCII 字符,请使用 $(echo "\001") 和 $(echo "\013")。

于 2013-04-08T18:45:03.817 回答
0

看起来那些是控制字符(^A实际上是 ASCII 码 1 的非打印字符)。我可以想到两种方法来解决这个问题。首先,尝试匹配

# If you get the pattern of characters right, this will work:
sed -e 's/C-ARM #11 w.w.w..g.w//' myfile > newfile

# This will be less precise, but should still work:
sed -e 's/C-ARM #11 .*"/"/' myfile > newfile

或用于cat将那些非打印字符转换为打印字符,然后使用sed

cat -A myfile > myfile.fixed
sed -e 's/C-ARM #11 w^Aw^Aw^A^Sg^Aw//' myfile.fixed > newfile
于 2013-04-08T18:46:22.243 回答