Я пытаюсь удалить последние символы, кроме букв:
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})?(\/.*)?$
Это регулярное выражение принимает URL с http
/ 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'