Ответ 1
Вот окончательный код, в который я попал
`echo "$string" | sed 's/[^a-zA-Z0-9]/ /g'`
Мне пришлось поставить =
и -
в самом конце.
У меня есть строка, из которой я хочу удалить пунктуацию.
Я начал с
sed 's/[[:punct:]]/ /g'
Но у меня были проблемы с HP-UX, которые мне не нравились все время, а иногда я получал 0 и ничего после того, как $
в моей строке исчезнет. Поэтому я решил попробовать сделать это вручную.
У меня есть следующий код, который работает во всех моих пунктуациях, которые меня интересуют, за исключением того, что я не могу добавить квадратные скобки "[]" к моему sed с чем-либо еще, иначе он ничего не заменит, и я не получу ошибка, поэтому я не уверен, что исправить.
В любом случае, это то, что я сейчас имею, и хотел бы добавить []
в.
sed 's/[-=+|[email protected]#\$%^&*(){}:;'\'''\"''\`''\.''\/''\\']/ /g'
BTW Я использую KSH для Solaris, Redhat и HP
Вот окончательный код, в который я попал
`echo "$string" | sed 's/[^a-zA-Z0-9]/ /g'`
Мне пришлось поставить =
и -
в самом конце.
Вам нужно разместить скобки в начале выражения:
sed 's/[][=+...-]/ /g'
Поместив ']' в качестве первого символа сразу после открывающей скобки, он интерпретируется как член набора символов, а не закрывающая скобка. Размещение '[' в любом месте скобок делает его членом набора.
Для этого набора символов вам также необходимо иметь дело с -
специально, так как вы не пытаетесь создать диапазон символов между [
и =
. Поэтому поставьте -
в конце класса.
Вы также можете указать символы, которые вы хотите сохранить [с инверсией]:
sed 's/[^a-zA-Z0-9]/ /g'
Вы можете сделать это вручную:
sed 's/[][\/$*.^|@#{}~&()_:;%+"='\'',`><?!-]/ /g'
Это удаляет 32 символа пунктуации, порядок некоторых символов важен:
-
должен быть в конце как -]
[]
должен быть таким, как [][other characters]
'
следует экранировать как '\''
^
, как в [^
[.
[=
[:
и заканчиваться на .]
=]
:]
$]
здесь вы можете объяснить, почему все это http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03_03
Может обрабатываться с использованием техники захвата регулярных выражений (например: здесь ниже):
echo "narrowPeak_SP1[FLAG]" | sed -e 's/\[\([a-zA-Z0-9]*\)\]/_\1/g'
> narrowPeak_SP1_FLAG
\[ : literal match to open square bracket, since [] is a valid regex
\] : literal match to square close bracket
\(...\) : capture group
\1 : represents the capture group within the square brackets