모든 줄에서 알파벳이 아닌 후행 문자를 어떻게 제거합니까?

모든 줄에서 알파벳이 아닌 후행 문자를 어떻게 제거합니까?

알파벳을 제외한 마지막 문자를 제거하려고 합니다.

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

NB: regex(foo)문자열을 가져온 함수일 뿐이며, True정규식이 정상이면 반환하고, False다른 경우에는 반환합니다.

NB2: 내 구문이 정확하지 않을 수도 있지만 팁을 드리기 위한 것입니다.

답변3

이를 위해 Perl one-liner를 사용할 수 있습니다.

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

이는 linewise의 내용을 읽고 줄 끝의 input.txt모든 알파벳이 아닌 문자( )를 줄 바꿈( ) 으로 바꿉니다.[^a-zA-Z]*$\n

답변4

고전적인 정규식 검색 및 바꾸기입니다.https://regex101.com/r/gRiUTc/2

쉘을 통해 사용할 수 있습니다

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

관련 정보