challenge 条件を満たす行を取り除く

ファイルから1行ずつ読み込み、"#"で始まる行だけを取り除いてファイルに出力するコードを書いてください。

サンプル入力

hello!
# remove this
 # don't remove this
bye!
サンプル出力
hello!
 # don't remove this
bye!

Posted feedbacks - Bash

シェルスクリプトで頑張ろうと思ったけど、入力で先頭の空白を無視しない方法が分からなくて断念。

read LINE
で
 # don't
を入力すると
LINEに"# don't"と入るみたい。

可能だったら、
echo $LINE | grep -v "^#"みたいにしたかった。
1
grep -v "^#"

read は引数を指定しない場合、末尾の改行文字のみを削除します。 「先頭の空白」が無視されるのは、 引数の渡し方によるのではないでしょうか。 単語分割のさいに空白は、なくなります。 echo ”$LINE” のように、クォートしてみてください。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#! /bin/bash
function echo_if_not_comment(){
    [ "${1:0:1}" != '#' ] && echo -n "$1"
}
while read -r; do
    if [ -z "$REPLY" ]; then
        echo
    else 
        echo_if_not_comment "$REPLY"$'\n'
    fi
done
echo_if_not_comment "$REPLY"

アドバイスありがとうございます。
問題は
 read LINE
とやっていた事みたいです。
1
2
3
4
5
6
7
8
9
#!/bin/bash

# 失敗したパターン
# read LINE
# echo "$LINE" | grep -v "^#"

while read -r; do
    echo "$REPLY" | grep -v "^#"
done

Index

Feed

Other

Link

Pathtraq

loading...