zfs diff
\xxxx
用(八进制编码)替换文件名中的某些字符。我可以使用awk
或sed
任何其他常用实用程序将其解密吗(无需使用 perl 或 python 脚本)?zfs diff
可以按如下方式创建示例输出:
echo '+ F /dir/my\0040file' > listing
我的问题是,我可以解密listing
得到
+ F /dir/my file
代替
+ F /dir/my\0040file
(我的最终目标是将其重新输入ls -l
以获取文件大小。)
答案1
自以下日期起使用 GNU awk strtonum()
:
$ echo '+ F /dir/my\0040file' |
awk '{
while(match($0,/\\0[0-9]{3}/)) { # find \nnnn
c=strtonum(substr($0,RSTART+1,RLENGTH-1)) # extract the nnnn
printf "%s%c",substr($0,1,RSTART-1),c # output
$0=substr($0,RSTART+RLENGTH) # prepare for next round
}
print $0
}'
输出:
+ F /dir/my file
几乎仅对您的样本进行测试。
答案2
这可能对你有用(GNU sed 和 dash):
sed 's/.*/echo "&"/e' file
注意:我使用的版本使用指向 dash 的 /bin/sh 评估替换命令的 RHS。dashecho
中的命令转换\0nnn
为其八进制表示形式。