我的shell在.login文件中调用'fortune',以提供一则每日信息。但是,其中有些信息的开头有一个空格行,有些信息的开头有两个空格行,而有些则没有任何前导空白行,这让我感到困扰。
于是我开始编写自己的shell脚本包装'fortune',以便从输入中删除所有前导空格,同时不破坏实际消息的任何格式,因为它可能故意有空白行。
这似乎并不是一个简单的一行两分钟修复,当我阅读sed和grep的手册页时,我想问问我们这里的优秀赞助者们。
我的shell在.login文件中调用'fortune',以提供一则每日信息。但是,其中有些信息的开头有一个空格行,有些信息的开头有两个空格行,而有些则没有任何前导空白行,这让我感到困扰。
于是我开始编写自己的shell脚本包装'fortune',以便从输入中删除所有前导空格,同时不破坏实际消息的任何格式,因为它可能故意有空白行。
这似乎并不是一个简单的一行两分钟修复,当我阅读sed和grep的手册页时,我想问问我们这里的优秀赞助者们。
使用和Dav相同的源:
# delete all leading blank lines at top of file
sed '/./,$!d'
来源: http://www.linuxhowtos.org/System/sedoneliner.htm?ref=news.rdf
此外,这是为什么它有效的原因:
逗号分隔了一个“操作范围”。sed 可以接受正则表达式来定义范围,因此 /./
匹配第一行中的“任何内容”(.
),$
指定文件的结尾。因此,
/./,$
匹配“从第一行非空白行到文件末尾”。!
然后反转该选择,使其有效成为“文件顶部的空行”。d
删除这些行。# delete all leading blank lines at top of file
sed '/./,$!d'
来源: http://www.linuxhowtos.org/System/sedoneliner.htm?ref=news.rdf
将 fortune 的输出导入它即可:
fortune | sed '/./,$!d'
怎么样:
sed "s/^ *//" < fortunefile
我不确定你的幸运信息实际上是什么样子,但这里有一个插图。
$ string=" my message of the day"
$ echo $string
my message of the day
$ echo "$string"
my message of the day
或者你可以使用awk
echo "${string}" | awk '{gsub(/^ +/,"")}1'