Linux:如何仅在包含表达式的行上替换文件中的单词
Linux : How to replace words in files only on lines containing an expression
我想将目录(包括子目录)中包含的所有文件中的“/foo/”表达式替换为“/foo/bar/”,但仅限于包含“.model”的行
例如:
import {....} from '../foo/toto.model' => import {....} from '../foo/bar/toto.model
import {....} from '../foo/toto.service' => unchanged
感谢您的帮助
您可以使用 sed -i
和 find
轻松做到这一点。您将使用 find
找到所选目录下的所有文件,然后使用 sed
使用 find
的 -execdir
选项就地进行替换,例如
find /some/path -type f -execdir sed -i "/model/s#/foo/#/foo/bar/#g" '{}' +
正则表达式 /model/s#/foo/#/foo/bar/#g
将仅在包含 "model"
的行上运行,然后使用备用分隔符 '#'
正常替换所有出现的 "/foo/"
与 "/foo/bar/"
通过在末尾提供 'g'
选项。 (要仅替换第一次出现的 "/foo/"
,请从末尾删除 'g'
)。
如果您还有其他问题,请告诉我。
我想将目录(包括子目录)中包含的所有文件中的“/foo/”表达式替换为“/foo/bar/”,但仅限于包含“.model”的行
例如:
import {....} from '../foo/toto.model' => import {....} from '../foo/bar/toto.model
import {....} from '../foo/toto.service' => unchanged
感谢您的帮助
您可以使用 sed -i
和 find
轻松做到这一点。您将使用 find
找到所选目录下的所有文件,然后使用 sed
使用 find
的 -execdir
选项就地进行替换,例如
find /some/path -type f -execdir sed -i "/model/s#/foo/#/foo/bar/#g" '{}' +
正则表达式 /model/s#/foo/#/foo/bar/#g
将仅在包含 "model"
的行上运行,然后使用备用分隔符 '#'
正常替换所有出现的 "/foo/"
与 "/foo/bar/"
通过在末尾提供 'g'
选项。 (要仅替换第一次出现的 "/foo/"
,请从末尾删除 'g'
)。
如果您还有其他问题,请告诉我。