我有一個作業來列印 shell 腳本的標題作為幫助選項,使用 sed
shell腳本(來自教授的正確答案)
#---------------------------------------------------------------------
# File-name: <script1.sh>
# Language: bash script
# Project: Shell Script Programming Class
# Description: xyz
# Author: iamgroot
#---------------------------------------------------------------------
if [ "$1" == '-h' ] ; then
echo Help:
sed -n '/File\-name/,/A\uthor/p' "$0" | sed "s/^#//g"
exit 0
fi
輸出
Help:
File-name: <script1.sh>
Language: bash script
Project: Shell Script Programming Class
Description: xyz
Author: iamgroot
我不明白為什么會有\之前-name和之前uthor(第 10 行 shell 腳本)
還有為什么有"$0"(同一行)?任何幫助,將不勝感激
uj5u.com熱心網友回復:
為了說明我在評論中的回答:
$ cat f
#---------------------------------------------------------------------
# File-name: <script1.sh>
# Language: bash script
# Project: Shell Script Programming Class
# Description: xyz
# Author: iamgroot
#---------------------------------------------------------------------
$ sed -n '/File\-name/,/A\uthor/p' f
# File-name: <script1.sh>
# Language: bash script
# Project: Shell Script Programming Class
# Description: xyz
# Author: iamgroot
$ sed -n '/File-name/,/Author/p' f
# File-name: <script1.sh>
# Language: bash script
# Project: Shell Script Programming Class
# Description: xyz
# Author: iamgroot
uj5u.com熱心網友回復:
在\之前-name是沒有必要的,而且很可能會導致不確定的行為。它放在那里是為了防止File-name在該sed行中出現第二次匹配(對于 string ),但這不是完成這項作業的合適方法。一個可行的方法可能是:
$ 貓測驗腳本
#!/bin/bash
#---------------------------------------------------------------------
# File-name: <script1.sh>
# Language: bash script
# Project: Shell Script Programming Class
# Description: xyz
# Author: iamgroot
#---------------------------------------------------------------------
if [ "$1" = '-h' ] ; then
echo Help:
sed -n '/^#[[:blank:]]*File-name/,/^#[[:blank:]]*Author/{s/^#//p;}' "$0"
exit 0
fi
$ ./testscript -h
Help:
File-name: <script1.sh>
Language: bash script
Project: Shell Script Programming Class
Description: xyz
Author: iamgroot
但是,我會將sed行更改為這樣的:
sed -n -e '/^#--*$/!d' -e ':a' -e 'n; /^#--*$/q; s/^#//p; ba' "$0"
這將列印出#--...--s之間的行,去除前導#s。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/408883.html
標籤:
