1 (27.06.2012 17:49:25 отредактировано DECAL)

Пишу скрипт и я не могу сообразить как поменять третье слово (150000) на "1" в строке:

#l# 1284725281 150000

учитывая, что третье слово может быть разной длиной, а второе всегда одинаковой, но с разными цифрами

Я примерно вот так начал писать, а дальше не соображу:

sed 's/^#l#\ [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\ /#l#\ "вот тут уже не соображу"' ahistory.dat

2

sed -r 's/(#l# [0-9]{10}) [0-9]+/\1 1/'

95% процентов проблем находятся между клавиатурой и стулом.

3 (27.06.2012 18:21:15 отредактировано DECAL)

Fat-Zer пишет:

sed -r 's/(#l# [0-9]{10}) [0-9]+/\1 1/'

Объясни если можно, что эта строка значит...
Я так понял:
-r   -   включить использование регулярных выражений
s/(#l# [0-9]{10}) [0-9]+   -   заменить #l# и десять разных цифр и одну любую цифру или больше на ... а вот дальше не понял почему \1 1/

4

DECAL пишет:

Объясни если можно, что эта строка значит...Я так понял: -r   -   включить использование регулярных выражений

расширенных регулярных выражений - не надо ставить тучу слешей перед скобками... да, ЕМНИП это расширение гнутой версии...

DECAL пишет:

s/(#l# [0-9]{10}) [0-9]+   -   заменить #l# и десять разных цифр и одну любую цифру или больше на ...

да, всё так.

DECAL пишет:

а вот дальше не понял почему \1 1/

\1 - ссылка на выражение в первых круглых скобках, т.е. на то, что соответствовало '(#l# [0-9]{10})' в исходной строке.

95% процентов проблем находятся между клавиатурой и стулом.

5

если третье слово последнее и после него нет пробелов, то можно проще
sed 's/[^ ]*$/1/'

"Фирма Майкрософт не собирается поддерживать протокол TCP/IP в своих OS" 1993 (c) Билл Гейтс
"Мы изобрели новый протокол передачи данных, мы назвали его TCP/IP" 1995 (c) Билл Гейтс

6

 Консоль:

lupo@gentoo-laptop /tmp % cat test.txt                                                                  [gentoo-laptop][22:51]
#l# 1284725281 150000
lupo@gentoo-laptop /tmp % awk '{print $3" "$2" "$1}' test.txt                                           [gentoo-laptop][22:52]
150000 1284725281 #l#

Был, был и весь вышел...

7 (28.06.2012 11:21:13 отредактировано DECAL)

Всем большое спасибо, особенно Fat-Zer, тему считаю закрытой...