読者です 読者をやめる 読者になる 読者になる

基本的に怠Diary

学習ログを残したい

シェルスクリプトで遊ぶ(sed,コマンドライン引数)

shell Ubuntu

今回も遊びました。

#!/bin/bash

#タイトルとかだすやつ
part_output()
{
    local title=$1
    echo "${title}"
}
#説明とかだすやつ 引数ごとに改行するよ
description_output()
{
    echo "==========================="
    local end=$#
    for par in "$@"
    do
        echo $par
    done
    echo "==========================="
    echo ""
}
temp_output()
{
    local title=$1
    local cmd=$2
    local param=$3
    part_output $title
    eval $cmd
    shift 3
    while [ "$1" != "" ]
    do
        param="${param} ${1}"
        shift
    done
    description_output $param
}

putText="「梅酒」を「日本酒」に置き換えるよ"
temp_output '一行目表示' "sed 1p -n sed_target.txt" "一行目を表示するよ"
temp_output '置き換え(一つ)' "sed s/梅酒/日本酒/ sed_target.txt" $putText "ただし一行の1つ目しか置き換わらないよ"
temp_output '置き換え(一行内複数置き換え)' "sed s/梅酒/日本酒/ sed_target.txt" $putText "ちゃんと全部変わるよ"
temp_output '置き換え(正規表現)' "sed s/\"v.*!$\"/\"<対象です>\"/g sed_target.txt" $putText "正規表現" "「v」から始まって!で終わる一行を置き換え"
temp_output 'おまけ' "sed s/!/♡/g sed_target.txt" "半角の「!」しか置き換わらないぞ"

ハマった?部分はコマンドライン引数の一部のみ操作する点に困りました。

shift 3
    while [ "$1" != "" ]
    do
        param="${param} ${1}"
        shift
    done

助言を頂くまでここで数十分ほど止まってました。

[Shift n]とは

コマンドライン引数を指定した数(n)ずらすものらしいです。

test "a" "b" "c"

と試していたとすると何もしていないと$1は"a"ですが、

shiftを行うと$1は"b"になるみたいです。

便利です。




寝よう。




参考:Linuxコマンド集 - 【 shift 】 引数を1つずらす:ITpro