Ask Your Question
1

sed+backreference na solarisu

asked 2014-12-16 09:49:51 +0100

stekl.h gravatar image

updated 2014-12-16 12:17:28 +0100

Miro Hrončok gravatar image

Zdravím, snažím se přinutit sed, aby vytisknul poslední znak v řetězci. Na linuxu mi funguje

echo "this is Sparta" | sed 's/\(.*\)\(.$\)/\2/'
a

Na solarisu mi ovšem ten samý příkaz hodí zpět celý řetězec

echo "this is Sparta" | sed 's/\(.*\)\(.$\)/\2/'
this is Sparta

Myslel jsem si, že problém bude část .* a zkoušel použít znak +, ale bez úspěchu. Poradil by někdo? :)

edit retag flag offensive close delete

1 Answer

Sort by » oldest newest most voted
1

answered 2014-12-16 10:02:06 +0100

Josef Kokeš gravatar image

Ten váš regexp je trochu zvláštní. Na pohled v něm nevidím nic, co by mělo vadit, ale rozhodně bych to zapsal jinak:

echo "this is Sparta" | sed 's/^.*\(.\)$/\1/'

Ukotvil bych výraz k začátku (to by nemělo být potřeba, protože RE jsou hladové a .* by měla sežrat všechno od začátku řetězce, ale proč riskovat), vyhodil bych závorky kolem té části, kterou nepotřebuju (když ji nechci vytahovat, tak nepotřebuju závorky) a vyhodil bych $ až za závorku. Co jsem si zkoušel váš kód, tak to zahrnutí stringu do závorky je příčinou, proč vám to na Solarisu nefunguje správně, ale důvod neznám - z hlediska regexpů v tom není rozdíl, ale třeba je to nějaká chyba v Solarisím sedu.

edit flag offensive delete publish link more

Comments

Díky!

stekl.h ( 2014-12-16 10:12:33 +0100 )edit

Your answer

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!

Add answer

[hide preview]

Question tools

Follow
1 follower

Stats

Asked: 2014-12-16 09:49:51 +0100

Seen: 79 times

Last updated: Dec 16 '14