This topic has been archived. It cannot be replied.
-
工作学习 / 学科技术讨论 / shell问题再次请教: 如何找到所有匹配的行,然后拷贝两次此行,并在其中一行上加注释。 谢谢例如:
输入文件:
int main(int argc, char **argv)
{
printf("hello 1111 ~~~~ ");
printf("hello 2222 ");
printf("hello 3333 ~~~~ ");
printf("hello 4444 ");
return 0;
}
其中 ~~~~ 作为匹配条件
输出为:
int main(int argc, char **argv)
{
//printf("hello 1111 ~~~~ ");
printf("hello 1111 ~~~~ ");
printf("hello 2222 ");
//printf("hello 3333 ~~~~ ");
printf("hello 3333 ~~~~ ");
printf("hello 4444 ");
return 0;
}
-xw1196(眼高手低);
2010-7-16
{454}
(#6180249@0)
-
知道了: cat aa | awk '{if(/~~~~/) printf("//%s\n%s\n",$0,$0); else print $0 }'
-xw1196(眼高手低);
2010-7-16
(#6180345@0)
-
sed -e "s/.*~~~~.*/\/\/&\n&/" a.txt >b.txt
-wangqingshui(忘情水);
2010-7-16
(#6180391@0)
-
cool. 我就是想用sed,可惜不得其法。多谢
-xw1196(眼高手低);
2010-7-16
(#6180576@0)
-
再讨教, 怎么转义字符串里的\r\n。 谢谢"1111111 aaa\r\n" fgh
2222222 bbb
3333333 ccc
4444444 aaa
cat aa | sed -e "s/.*\\\\r\\\\n.*/\/\/&\n&/" # 这个看起来工作
cat aa | sed -e "s/.*\\r\\n.*/\/\/&\n&/" #为啥这个不对呢
-xw1196(眼高手低);
2010-7-16
{220}
(#6180739@0)
-
rolia 给吃掉了 反斜线"1111111 aaa ``r``n" fgh
2222222 bbb
3333333 ccc
4444444 aaa
cat aa | sed -e "s/.*````r````n.*/\/\/&`n&/" # 这个看起来工作
cat aa | sed -e "s/.*``r``n.*/\/\/&`n&/" #为啥这个不对呢
其中 ` 表示 反斜线
-xw1196(眼高手低);
2010-7-16
{223}
(#6180756@0)
-
你的文件里的 \\n 不是换行符,似乎是要输出C或C++源文件。你要匹配 \\n , 这里 n 是普通字符,只有两个反斜线需要转义,所以是 \\\\n。
-wangqingshui(忘情水);
2010-7-17
(#6181600@0)
-
谢谢,是rolia 把我搞乱了。其实就一个斜线 \n, printf("Hello world\n"); 匹配这个\n 必须是\\\\n。 我认为道理上应该\\n就可以了。
-xw1196(眼高手低);
2010-7-17
(#6181931@0)
-
可能是shell 需要转移一次。如果存在文件里用 -f ,可能 \\r\\n就可以了。
-wangqingshui(忘情水);
2010-7-17
(#6182059@0)
-
多谢,看来只能多试了
-xw1196(眼高手低);
2010-7-18
(#6183179@0)