显示控制台输出下面 1 行或多行

显示控制台输出下面 1 行或多行

当我运行像我这样的命令时tail ~/SOMEFILE,例如:

testenv@vps_1:~# tail ~/SOMEFILE
    This is the content of SOMEFILE.

但是,如果我想在:testenv@vps_1:~#和输出之间有一个回车符怎么办:This is the content of SOMEFILE.

所以最终的结果会是这样的:

testenv@vps_1:~# tail ~/SOMEFILE

    This is the content of SOMEFILE.

或这个:

testenv@vps_1:~# tail ~/SOMEFILE


    This is the content of SOMEFILE.

或这个:

testenv@vps_1:~# tail ~/SOMEFILE



    This is the content of SOMEFILE.

注意:第一个示例显示两个部分之间的一行间距,第二个示例显示两行,第三个示例显示三行。

有没有办法确保tail输出(或任何其他输出)像我在示例中所示的那样被间隔开,只是为了这个特定的命令(当然不是所有命令),在 Bash 中?

答案1

tail没有任何论据来管理这个。

作为一个人你可以做什么解决方法正在打印一个空行在运行 tail 命令之前。

echo && tail ~/SOMEFILE

对于多条线路: yes也可以使用命令。是的手册页就像这里建议的那样:bash:打印 x 空行数

yes '' | sed 5q && tail ~/SOMEFILE

将 5 替换为您想要的空行数。

注意:您可能还想看看编辑终端提示符。但随后它将是终端范围的,而不仅仅是链接到您的特定命令。

答案2

最简单的选择是手动打印那些额外的换行符,例如:

printf '\n\n\n'; tail ~/SOMEFILE

但如果你想:

  • 这样做只是为了tail
  • 每次tail调用时不要编写额外的命令
  • 对换行符的数量进行简单而全面的控制

那么我建议您将一个函数添加到您的 aliases/rc 文件中。

例如:

# Bash version

# In Bash we can override commands with functions
# thanks to the `command` builtin
tail() {

  # `local` limit the scope of variables,
  # so we don't accidentally override global variables (if any).
  local i lines

  # `lines` gets the value of the first positional parameter.
  lines="$1"

  # A C-like iterator to print newlines.
  for ((i=1; i<=lines; i++)); do
    printf '\n'
  done

  # - `command` is a bash builtin, we can use it to run a command.
  #   whose name is the same as our function, so we don't trigger
  #   a fork bomb: <https://en.wikipedia.org/wiki/Fork_bomb>
  #
  # - "${@:2}" is to get the rest of the positional parameters.
  #   If you want, you can rewrite this as:
  #
  #       # `shift` literally shifts the positional parameters
  #       shift
  #       command "${@}"
  #
  #   to avoid using "${@:2}"
  command tail "${@:2}"

}

#===============================================================================

# POSIX version

# POSIX standard does not demand the `command` builtin,
# so we cannot override `tail`.
new_tail() {

  # `lines` gets the value of the first positional parameter.
  lines="$1"

  # `i=1`, `[ "$i" -le "$lines" ]` and `i=$((i + 1))` are the POSIX-compliant
  # equivalents to our C-like iterator in Bash
  i=1
  while [ "$i" -le "$lines" ]; do
    printf '\n'
    i=$((i + 1))
  done

  # Basically the same as Bash version
  shift
  tail "${@}"

}

所以你可以将其称为:

tail 3 ~/SOMEFILE

答案3

对于单个空行

sed '{x;1p;x;}' filename | tail

开头5个空行

sed '{x;1p;1p;1p;1p;1p;x;}' filename | tail

相关内容