[英]using sed in shell script
我有一個作業要使用sed
打印 shell 腳本的 header 作為幫助選項
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
output
Help:
File-name: <script1.sh>
Language: bash script
Project: Shell Script Programming Class
Description: xyz
Author: iamgroot
我不明白為什么在-name
和uthor
之前有\
(第 10 行 shell 腳本)
另外為什么有"$0"
(同一行)? 任何幫助,將不勝感激
為了說明我在評論中的回答:
$ 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
根本不需要-name
之前的\
,並且可能會導致未定義的行為。 它放在那里是為了防止sed
行中的第二次匹配(對於字符串File-name
),但這不是完成這項工作的合適方法。 一個可行的方法可能是:
$ 貓測試腳本
#!/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"
這將打印出#--...--
之間的行,去掉前導的#
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.