在Linux/Bash环境下如何将//<换行>替换为空字符?
解决Linux/Bash中将//<换行>替换为空字符的问题
你的原命令问题在于:sed默认按行处理输入,每行的换行符不会被包含在处理的内容中,所以你只替换了行尾的//为null字符,但原来的换行符依然保留。
以下是几种可行的解决方案:
方案1:使用带-z选项的sed
利用sed的-z选项将输入输出的行分隔符设为null,这样可以将整个输入作为一个整体处理,匹配//加上换行符的组合并替换为null:
stat --format="%s %W %Y %X %Z %n//" * | sed -z 's/\/\/\n/\x0/g'
方案2:改用stat的--printf选项+awk
stat的--format会自动在格式字符串结尾添加换行符,改用--printf可以避免这个行为,再用awk替换//为null字符:
stat --printf="%s %W %Y %X %Z %n//" * | awk '{gsub(/\/\//, "\x0"); printf "%s", $0}'
方案3:使用tr结合awk(适合简单场景)
先通过tr去掉换行符,再用awk替换//为null:
stat --format="%s %W %Y %X %Z %n//" * | tr -d '\n' | awk '{gsub(/\/\//, "\x0"); printf "%s", $0}'
内容的提问来源于stack exchange,提问作者William Deans
相关产品推荐
相关产品推荐

