Чтобы быть "непериодом", тогда последовательность [ ^.]
- это то, что вам нужно. В ваших примерах у вас есть \
перед [
, что неверно.
Так, например:
foo("some text").arg("more text");
foo("some text");
% sed 's/foo("some text")[^.]/replaced text/' tstfile
foo("some text").arg("more text");
replaced text
Обратите внимание, что это также заменило символ, следующий за foo (..)
. Если вы хотите сохранить это, мы можем его запомнить:
% sed 's/foo("some text")\([^.]\)/replaced text\1/' tstfile
foo("some text").arg("more text");
replaced text;
Попробуйте также
awk '{sub (/^.*until: /, "")} 1' file
Sun Nov 24 12:11:28 EST 2019
Thu Feb 24 13:31:19 EST 2022
Fri Dec 20 12:11:17 EST 2041
или даже короче
sed 's/^.*until: //' file
Sun Nov 24 12:11:28 EST 2019
Thu Feb 24 13:31:19 EST 2022
Fri Dec 20 12:11:17 EST 2041
Если формат всегда будет одинаковым, вы также можете попробовать:
cut -d':' -f 5- /path-to-file
Установив разделитель awk
на "until:"
, вы можете получить последующую строку, пока этот текст существует в вашей строке.awk -F'until:' '{print $2}'
echo "Valid from: Fri Nov 24 12:11:28 EST 2017 until: Sun Nov 24 12:11:28 EST 2019" | awk -F'until:' '{print $2}'
С GNU grep
echo "$string" | grep -oP 'until: \K.*'
Это соответствует слову "до :", тогда \K
забывает обо всем, что только что было сопоставлено, тогда .*
может сопоставить все после этого.