各行の末尾の非アルファベット文字を削除するにはどうすればよいですか?

各行の末尾の非アルファベット文字を削除するにはどうすればよいですか?

アルファベット以外の最後の文字を削除しようとしています:

support.help1.com,,
support.help1.com.
support.help1.com9
support.help1.com*
support.help1.com@@
support.help1.com##
support.help1.com%%
support.help1.com^
support.help1.com
support.help1.com,
support.help1.com-

出力は次のようになります:

support.help1.com
support.help1.com
support.help1.com
support.help1.com
support.help1.com
support.help1.com
support.help1.com
support.help1.com
support.help1.com
support.help1.com
support.help1.com

答え1

sed も役立つかもしれません:

command | sed 's/[^a-Z]*$//g'

# create the example output
$ echo "support.help1.com,,
support.help1.com.
support.help1.com9
support.help1.com*
support.help1.com@@
support.help1.com##
support.help1.com%%
support.help1.com^
support.help1.com
support.help1.com,
support.help1.com-" > trailexample.txt

# now edit this stream
# something like $ command_output | sed

$ cat trailexample.txt | sed 's/[^a-Z]*$//g'
support.help1.com
support.help1.com
support.help1.com
support.help1.com
support.help1.com
support.help1.com
support.help1.com
support.help1.com
support.help1.com
support.help1.com
support.help1.com

# explanation
# sed (replace) 's/this/by-this/g' :: sed 's/[^a-Z]*$//g'
# s : substitution command, we want to substitute strings
# The 'this' [^a-Z]*$ : regexp pattern
#   ^ mean not
#   a-Z means all aLphBetiCaL chars
#   []* any number of what is in brackets
#   $ means end of line
# So the 'this' is 'any number of consecutive non-alphabetical chars before end of line'
# And the 'by-this' is empty, nothing, nada, void :: //
# g : global substitution command, means do the replacement for all occurrences

答え2

正規表現を使用できる場合は、各コマンドをロードして、以下の正規表現を使用します(以下から取得しました)ここ):

^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$

この正規表現はhttp/を含むURLを受け入れますhttps。URLが有効かどうかを確認するために使用してください。有効でない場合は、最後の文字を削除して文字列をロードします。これを使用して回避策そのために:

string="string.help1.com&&"
foo=string

while [ !regex(foo) ]; do
foo=${foo%?}
done
print foo

注意:regex(foo)文字列を取得する関数であり、True正規表現が正しい場合は戻り、Falseそうでない場合は

注2: 私の構文はおそらく正しくありませんが、これはヒントとしてお伝えするだけです

答え3

これには、Perl ワンライナーを使用できます。

perl -pne 's/[^a-zA-Z]*$/\n/g' input.txt

これは行ごとに内容を読み取り、行末のinput.txtアルファベット以外の文字( )をすべて改行文字( )に置き換えます。[^a-zA-Z]*$\n

答え4

これは古典的な正規表現の検索と置換ですhttps://regex101.com/r/gRiUTc/2

シェル経由では

<input sed -r 's/(\W+|[0-9]+)$//g'

関連情報