簡體   English   中英

在 shell 腳本中使用 sed

[英]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

我不明白為什么在-nameuthor之前有\ (第 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM