Bash:特殊文字を無視

Bash:特殊文字を無視

このコードがあります

 cat SomeFile | tr -cs '[:alnum:]' '\n' |tr -d 0-9 | tr '[:upper:]' '[:lower:]' > net.txt

ファイルを読み、これらの文字を無視したいと思います。ウェブサイト以外の出力は1行に1語です。

 \'#$%.,:;?!&*|()[]"<>=-

catとtrだけを使ってこれを行うにはどうすればよいですか?

出力は次のようにする必要があります

other
branches
examples
for
developers
http//drupalorg/project/examples
what
is
this
this
set
of

ありがとう

答え1

利用可能ないくつかの翻訳があります。

tr "'"'\#$%.,:;?!&*|()[]"<>=-' ' ' <SomeFile | tr -s '[:space:]' "\n"

最初の操作は不要な文字を空白に変換します。 2番目の操作は、すべてのスペース(改行を含む)を改行に変換し、改行を単一の文字に圧縮します。

答え2

入力の場合SomeFile

例: for9 Developer>http://example.org/examples?s=%20&<what>
これは何ですか?

次の出力が生成されます。

examples
for
developers
http://example.org/examples?s=%20&
what
is
this

私はこれが欲しいできるtrこれは+シェルを使って行うことができます。

for i in $(<SomeFile tr -cs ']a-zA-Z0-9/:.%?=&_,+()~['\''#$;!*-' '\n' | \
    tr '[:upper:]' '[:lower:]'); do
    case "$i" in
        *://*)
            echo "$i" >> net.txt ;;
        *)
            for split in $(echo "$i" | tr -c 'a-z' '\n'); do
                echo "$split" >> net.txt
            done ;;
    esac
done

grepただし、次に追加する方が簡単かもしれませんtr

< SomeFile tr -cs ']a-zA-Z0-9/:.%?=&_,+()~['\''#$;!*-' '\n' | \
    tr '[:upper:]' '[:lower:]' | grep -o '.*://.*\|[a-z]*' > net.txt
  • どちらも必要ありませんcat。ファイルを標準入力として指定するだけです。tr

グレブ:

grep -oE '[a-zA-Z]+://[]a-zA-Z0-9/:.%?=&_,+()~['\''#$;!*-]+|[[:alpha:]]+' \
    -- SomeFile | tr '[:upper:]' '[:lower:]' > net.txt

zsh配列を使用できます。

file=( ${(L)=$(< SomeFile)//[^]a-zA-Z0-9\/:.%?=&_,+()~[\'#$;!*-]/ } )
printf '%s\n' ${(M)file:#*://*} ${=${file:#*://*}//[^a-z]/ }
  • まず、すべてのURLを印刷してから「単語」を印刷します。

関連情報