2

標準入力からファイルを読み取り、すべての文字列と空行文字を削除して、出力を標準出力に書き込むシェル スクリプトを作成したいと考えています。ファイルは次のようになります。

#some lines that do not contain <html> in here
<html>a<html>
<tr><html>b</html></tr>
#some lines that do not contain <html> in here
<html>c</html>

したがって、出力ファイルには次のものが含まれている必要があります。

#some lines that do not contain <html> in here
a
<tr>b</html></tr>
#some lines that do not contain <html> in here
c</html>

私はこのシェルスクリプトを書き込もうとしています:

read INPUT #read file from std input
tr -d '[:blank:]'
grep "<html>" | sed -r 's/<html>//g'
echo $INPUT

ただし、このスクリプトはまったく機能していません。何か案が?どうも

4

2 に答える 2

1

Awkはそれを簡単に行うことができます:

awk '/./ {gsub("<html>","");print}' INPUTFILE

まず、少なくとも1文字のすべての行で動作し(したがって、空の行は破棄されます)、 " <html>"を行の空の文字列にグローバルに置き換えてから、印刷します。

于 2013-03-19T19:54:48.497 に答える
1

純粋なバッシュ:

#!/bin/bash

while read line
do
    #ignore comments
    [[ "$line" = "\#" ]] && continue
    #ignore empty lines
    [[ $line =~ ^$ ]] && continue
    echo ${line//\<html\>/}
done < $1

出力:

$ ./replace.sh input
#some lines that do not contain in here
a
<tr>b</html></tr>
#some lines that do not contain in here
c</html>

ピュアシード:

sed -e :a -e '/^[^#]/N; s/<html>//; ta' input | sed '/^$/d'
于 2013-03-19T20:03:10.027 に答える