In config.txt some lines contain the word `foo` more than once. Which command prints the file with EVERY occurrence on every line replaced by `bar`, leaving the file itself unchanged?

LPIC-1 Exam 101-500, objective 103. GNU and Unix commands medium

Draft — not checked yet. This question was written from the published exam objectives and cites the clause it comes from, but nobody has yet read it against that clause and signed for it.

It is kept out of search results and out of mock exams until they have. Read the source below before you take the answer as settled.

The options

Not correct sed 's/foo/bar/' config.txt

Wrong. Without a flag, sed substitutes only the FIRST match on each line; later occurrences on the same line survive.

Correct sed 's/foo/bar/g' config.txt

Correct. The trailing g flag makes the substitution global within each line, and sed writes the result to standard output without touching the file.

Not correct sed -n 's/foo/bar/g' config.txt

Wrong. -n suppresses the automatic printing of each line, and there is no p flag here, so this command produces no output at all.

Not correct sed -i 's/foo/bar/g' config.txt

Wrong for this question, though the substitution itself is right. -i edits the file in place, which the question explicitly forbids, and it prints nothing.

Why

sed's substitute command is s/pattern/replacement/flags. Useful flags: g for every match on the line, a number for the nth match, p to print (paired with -n to print only matching lines), i for case-insensitive matching. The -i OPTION (not the flag) rewrites the file in place and is the one to be careful with.

Where this comes from

Cited
LPI exam objective 103.2
What it says
Use sed to perform substitutions on a text stream.

Practise this

Reading one question is not practice. The trainer will draw a set from objective 103 and space the ones you get wrong.

Practise LPIC-1 Exam 101-500