Linuxシステムには、次のテキストを含むファイルがあります。またはをtitle AHS - abc Linux Servers使用してsed文字列を検索awkし、一致の後ろの2行目に新しい項目を追加する必要があります。

#
# AHS - ABC Linux CBTS 
#
subparent AHS_ABC_NIX AHS_abct_NIX_CIN CBTS
title AHS - abc  Linux Servers <---this is what I want to search in text file
group-sorted
>---here I need to add the new entry---<
10.34.73.111     lkut            # testip "TRENDS:*,netstat:netstat|netstat1|netstat2|netstat3"
10.34.73.111     lkut0            # testip "TRENDS:*,netstat:netstat|netstat1|netstat2|netstat3"
10.10.10.10      lkut1          # testip "TRENDS:*,netstat:netstat|netstat1|netstat2|netstat3"
10.10.10.10     lkut2           # testip "TRENDS:*,netstat:netstat|netstat1|netstat2|netstat3"
10.10.10.10    lkut3         # testip "TRENDS:*,netstat:netstat|netstat1|netstat2|netstat3"
10.48.12.131    lkut4            # testip "TRENDS:*,netstat:netstat|netstat1|netstat2|netstat3"
10.48.12.57     lkut5            # testip "TRENDS:*,netstat:netstat|netstat1|netstat2|netstat3"

コマンドラインからパラメータを読み取ってこれを実行するスクリプトを作成しようとしています。

#! /bin/bash

user=whoami
#file1=/home/xymon/server/bin/ghostlist.cgi
logfile=logfile1  ###Local Log file######
client="$1" #passing whole string as an argument
hostname=$2 #providing the hostname as an argument to script
ip=$3  #providing ip
####taking backup while editing hosts file everytime#####
#cp -pr /home/xymon/server/etc/hosts.cfg "/home/xymon/server/etc/hosts.$(date +"%Y%m%d")"
echo $ip
echo $hostname

echo "hostfile is modified @ `date`" >>$logfile

>---sed code here---<

期待される出力。私たちが言うmyscript.sh私が実行したいスクリプトです。

sh -x myscript.sh "title AHS - abc  Linux Servers" test 0.0.0.0  

したがって、上記のコマンドはスクリプトに3つのパラメータを提供します。

  1. title AHS - abc Linux Servers- 文字列です。
  2. CPU名
  3. IPアドレス

私は次のような結果を期待しています: -

# AHS - ABC Linux CBTS 
#
subparent AHS_ABC_NIX AHS_abct_NIX_CIN CBTS
title AHS - abc  Linux Servers
group-sorted
0.0.0.0 test <--- here I want to add my arguments (hostname & ip)
10.34.73.111     lkut            # testip "TRENDS:*,netstat:netstat|netstat1|netstat2|netstat3" 
10.34.73.111     lkut0            # testip "TRENDS:*,netstat:netstat|netstat1|netstat2|netstat3"
10.10.10.10      lkut1          # testip "TRENDS:*,netstat:netstat|netstat1|netstat2|netstat3"
10.10.10.10     lkut2           # testip "TRENDS:*,netstat:netstat|netstat1|netstat2|netstat3"
10.10.10.10    lkut3         # testip "TRENDS:*,netstat:netstat|netstat1|netstat2|netstat3"
10.48.12.131    lkut4            # testip "TRENDS:*,netstat:netstat|netstat1|netstat2|netstat3"
10.48.12.57     lkut5            # testip "TRENDS:*,netstat:netstat|netstat1|netstat2|netstat3"

ベストアンサー1

そしてawk

awk \
-v pattern='^title AHS - abc  Linux Servers' \
-v ip="$ip" \
-v hostname="$hostname" \
'
    $0 ~ pattern {r=NR+2}
    r==NR {printf "%s %s\n",ip,hostname}
    1
' file

メモ:

  • あなたの質問には4行の後に追加するように指定されていますが、出力例では2行の後に追加します。これに応じてスクリプトの値を変更します。
  • これにより、ファイルは所定の位置に編集されません。ねえ

おすすめ記事