所以我需要浏览一些java文件,并在每个@author标记后拉出作者。我开始看awk,但是awk无法删除不需要的部分,所以我遇到了this。
我在跑什么
perl -n -e'/author (.*)/ && print $1' *.java
这不会打印任何内容。如果我做
perl -n -e'/author (.*)/ && print $_' *.java
它将(正确)打印整行。
我可以做到这一点,它确实实现了我的目标,但我仍然想知道为什么我的捕获组无法正常工作。
perl -n -e"/\@author / && print $'" *.java
示例输入:
/* HelloWorld.java
* @author Partner of Winning
* @author Robert LastName
*/
public class HelloWorld{
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
非常感谢您的帮助。
答案 0 :(得分:4)
你必须有一个很长的提示。较短的提示会显示问题。
$ perl -n -e'/author (.*)/ && print $1' *.java
$ bert LastNameing
您的文件有Windows行结尾(回车符+换行符),并且您输出的是没有换行符的回车符,导致行被覆盖。
您可以使用dos2unix
将文件转换为unix文件,也可以更改程序以处理CRLF行结尾。你可以在这里找到几个快捷方式。
添加换行符,有效中和CR。
$ perl -nle'/author (.*)/ && print $1' *.java
Robert LastName
Partner of Winning
但是,它可以输出导致问题的文本,因为它仍然包含输入的CR。以下内容避免匹配它们:
$ perl -nle'/author ([^\r\n]*)/ && print $1' *.java
Robert LastName
Partner of Winning