sed -i.bak2 's/<!-- TITLE: \([^>]*\) -->/====== \1 ======/g' cube.txt sed -i.bak2 's/<!-- SUBTITLE: \([^>]*\) -->/===== \1 =====/g' cube.txt
Suite à la conversation :
<tierce> hello how to search for <!-- TITLE: and replace with ====== using sed ? <Riviera> # echo '<!-- TITLE:<!-- TITLE:<!-- TITLE:' | sed 's/<!-- TITLE:/======/g' <shbot> Riviera: ================== <tierce> thank you ! <tierce> is it possible to replace ====== some title ====== by ====== some title ====== using sed ? <Riviera> That would be <Riviera> <!-- TITLE: ... until the end of the line? <tierce> and keep the « some title » text ? <Riviera> What if there are other tags on the same line, or what if the title spans multiple lines? <Riviera> sed is likely not the best tool to process your data <Riviera> Anyway, if it is to the end of the line: <tierce> the title does not span on multiple line <Riviera> # echo '<!-- TITLE: some title' | sed 's/<!-- TITLE:/======/;s/$/ ======/' <shbot> Riviera: ====== some title ====== <Riviera> ah <Riviera> i missed the -->, sorry. <Riviera> So that's a bit complicated in sed, let me think. <tierce> if another tool is necessary, what would you recommand ? <Riviera> Since your data is XML I'd recommend something that understands XML. Perhaps xmlstarlet or xmllint. <tierce> ok.. it helps me for the moment, and if it's not enough, I'll have a look on xmlstartel or xmlint. <tierce> thanks for your help <Riviera> well hm, since you are not looking for a robust solution anyway, <Riviera> perhaps this would suffice for your current situation: <Riviera> # echo '<!-- something -->====== some title ======<!-- something -->' | sed 's/<!-- TITLE: \([^>]*\) -->/====== \1 ======/g' <shbot> Riviera: <!-- something -->====== some title ======<!-- something --> <Riviera> sed 's/<!-- TITLE: \([^>]*\) -->/====== \1 ======/g'