shell 在Linux/Bash中,如何用//< newline>替换空字符?

pxq42qpu  于 2023-02-09  发布在  Shell
关注(0)|答案(1)|浏览(144)

例如:

stat --format="%s %W %Y %X %Z %n//" * | sed "s/\/\/$/\x0/"

是错误的,因为它仍然发出换行符。

  • PS:我相信这个问题是非常基本的,但不知何故,我没有立即确定答案。
3mpgtkmj

3mpgtkmj1#

不需要在事后进行替换;使用--printf而不是--format,这样就不会在第一个地方得到换行符,所以可以请求所需的输出格式:

stat --printf='%s %W %Y %X %Z %n\0' *

但是,如果您的stat版本不支持此功能,或者您的真实的程序与此不同,您可能会考虑...

while IFS= read -r result; do
  if [[ $result = *// ]]; then
    printf '%s\0' "${result%//}"
  else
    printf '%s\n' "$result"
  fi
done < <(stat --format="%s %W %Y %X %Z %n//" *)

相关问题