Почему у вас есть маркер начала строки ^
перед классом символов?Попробуйте:
sed 's:action="[^"]*":action="error.php":' <file1 > file2
Вот расшифровка стенограммы, показывающая вашу версию вместе с этим исправлением:
pax$ echo 'blah action="something" blah' | sed '
...$ s:action="^[^"]*":action="error.php":'
blah action="something" blah
pax$ echo 'blah action="something" blah' | sed '
...$ s:action="[^"]*":action="error.php":'
blah action="error.php" blah