Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何";“翻转替换”;使用shell脚本的文件中的字符串_Bash_String_Shell_Sed - Fatal编程技术网

Bash 如何";“翻转替换”;使用shell脚本的文件中的字符串

Bash 如何";“翻转替换”;使用shell脚本的文件中的字符串,bash,string,shell,sed,Bash,String,Shell,Sed,我面临以下问题 假设我有一个文件,其中包含如下内容: blah blah blah blah more text <tag1>something</tag1> <tag2>something else</tag2> blah blah meh whatever foo bar sed -e 's/tag1/temporarytag/g' -e 's/tag2/tag1/g' -e 's/temporarytag/tag2/g' 废话废话 更多文

我面临以下问题

假设我有一个文件,其中包含如下内容:

blah blah blah blah
more text
<tag1>something</tag1>
<tag2>something else</tag2>
blah blah meh whatever
foo bar
sed -e 's/tag1/temporarytag/g' -e 's/tag2/tag1/g' -e 's/temporarytag/tag2/g'
废话废话
更多文本
某物
别的
废话废话
富吧
我想做的是用tag2替换所有出现的tag1,用tag1替换所有出现的tag2。然而,我不知道怎么做,因为如果我使用像
sed's/tag1/tag2/g'
这样的东西,然后
sed's/tag2/tag1/g'
,我最终会得到一个只有tag1的文件

我需要的是“翻转”这两个标签


提前谢谢。

你能通过一些你知道文件中不存在的标签吗?i、 e

sed 's/tag1/tag99/g' 
sed 's/tag2/tag1/g'
sed 's/tag99/tag2/g'

你能通过一些你知道文件中不存在的标签吗?i、 e

sed 's/tag1/tag99/g' 
sed 's/tag2/tag1/g'
sed 's/tag99/tag2/g'

将tag1替换为唯一的(tag3),然后将tag2设置为tag1,然后将tag3设置为tag2。

将tag1替换为唯一的(tag3),然后将tag2设置为tag1,然后将tag3设置为tag2。

为第一次替换添加临时标记如何。大概是这样的:

blah blah blah blah
more text
<tag1>something</tag1>
<tag2>something else</tag2>
blah blah meh whatever
foo bar
sed -e 's/tag1/temporarytag/g' -e 's/tag2/tag1/g' -e 's/temporarytag/tag2/g'

为第一次替换添加一个临时标记怎么样。大概是这样的:

blah blah blah blah
more text
<tag1>something</tag1>
<tag2>something else</tag2>
blah blah meh whatever
foo bar
sed -e 's/tag1/temporarytag/g' -e 's/tag2/tag1/g' -e 's/temporarytag/tag2/g'

我想了想,我想我会用它,但是有更干净的解决方案吗?不用tag99使用tag1tag1,这将确保你不会碰到任何现有的标记。我想了想,我想我会用它,但是有更干净的解决方案吗?不用tag99使用tag1tag1,这将确保您不会点击任何现有标签。这是迄今为止三个答案中的最佳答案,因为它只需一次调用
sed
,并且是一个完整的答案。这是迄今为止三个答案中的最佳答案,因为它只需一次调用
sed
,并且是一个完整的答案。