我是linux / Unix新手。 我发现使用这些命令可以通过多种方式完成一些任务。 他们之间有一些关系吗? 或者哪一个是首选? 哪一个过时?
谢谢。
有什么办法来执行一个命令作为Python中的特定用户?
用execvp()执行shell命令
sed命令在多行search后插入多行string
Oracle环境variables“ORACLE_UNQname”
Java Runtime.getRunTime()。exec(CMD)不支持pipe道
有关Perl,Python,Awk和Sed之间差异的讨论,请参阅SO 366980 。
五个列表中有四个不同的命令; awk和gawk密切相关,GNU Awk是Awk的GNU实现。
find是用于根据文件特征(如名称或修改时间)在一组目录中查找文件。 GNU Find比传统或POSIX版本的Find有更多的功能。
grep是用于使用正则表达式来定位文件内的内容来控制选择的内容。 GNU Grep比Grep的传统或POSIX版本具有更多的功能。
sed用于使用编辑命令修改文件的内容,包括正则表达式。 GNU Sed有比Sed的传统或POSIX版本更多的功能。
awk是一种模式匹配和格式化语言。 这是一种编程语言,你提到的其他工具不是。 在需要时,这是非常有用的。 但是,Perl和Python也具有Awk和许多额外功能,所以很多人使用它们而不是Awk。 GNU Awk比传统或POSIX版本的Awk还要多一些。
所以,你列出的工具做不同的工作,但可以通过多种方式一起工作。 另外一个你应该注意的工具是xargs ,它接受文件列表,并依次在每个文件上运行指定的命令。
AWK是由Aho,Weinberger和coreighan设计的编程语言。 gawk是AWK的一个实现,但是还有其他几个,包括mawk和nawk 。 它是一种具有变量,控制结构和关联数组的完备编程语言,但通常针对UNIX系统上常见的各种基于文本的数据进行优化。
sed是流编辑器,受编辑的启发。 它有一个简单的命令集主要限于逐行编辑。 sed命令可以很容易地通过在awk模仿。 以下是等同的:
sed -e 's/foo/bar/g' awk '{ gsub(/foo/,"bar"); print $0 }' awk '{gsub(/foo/,"bar")}1'
grep找到文本。 基本的grep功能很容易在sed和awk被模仿。 以下是等同的:
grep 'foo.bar' sed -n -e '/foo.bar/p' awk '/foo.bar/ { print $0 }' awk '/foo.bar/'
哎呀,错过了find 。
find文件系统树,根据指定的标准执行 *** 作。 例如,
find . -name '.*' -prune -o ! -name '*~' -type f -exec cat '{}' ;
将从当前目录开始遍历所有文件和目录. ,排除(而不是下降到)名称以开头的任何目录. ,并对每个文件的名称不以~结尾的文件(打印出该文件的内容)运行cat 。 再一次,在AWK,Perl或其他许多编程语言(或者在本例中,甚至是纯shell)中,这是可行的,但是使用专用工具编写和理解更容易,更快捷。
不同的工具不同的工具。 问题就像“什么是更好的工具:锤子,螺丝刀或组合钳子?”
grep – 在文件/流中查找/过滤文本。 行匹配/不匹配 – 将其输出。 用来减少你所需要的输出量。 如果得到太多的信息,通常使用交互式。 还经常在脚本中使用“包含我所需要的那一行”
通常在使用grep脚本之后,你可以看到awk(复杂的表达式或者只是一个老派的程序员)或者裁减(这个速度要快得多,但是非常简单)来提取一个值。 (grep水平切割,垂直切割/ awk切片)
目前几乎看不到用于全功能编程的awk。
sed – 搜索和替换,通常是脚本化的(如果你想以交互的方式做一个可视化的编辑器,那么这个编辑器要好得多 – 你会看到正在做什么)。
找到 – 找到符合给定(高级)参数的文件。
这些工具做不同的事情,所以哪一个是首选取决于你想做什么。
在你提到的工具中, find与其他的有些不同 – 它在文件系统上工作,以搜索具有特定属性(名称,日期,权限等)的文件。
sed和grep以文本文件作为输入,对它们进行 *** 作并输出结果。 他们都大量使用正则表达式。 sed (“Stream EDitor”)通常用于搜索和替换 *** 作。 grep (“全局正则表达式打印”)在文本文件中输出符合某种模式的行。
在linux系统上, awk和gawk对于同一个程序,AWK的GNU版本(以其创建者“Aho,Weinberger,coreighan”命名)通常是不同的名称。 awk也可以指awk的“经典”版本,没有GNU扩展,还有其他的变种nawk (“new awk”)和mawk (“Mike's AWK”)。 awk远不止模式匹配; 它是一个非常成熟的编程语言,虽然它将输入文本分解为行和字段,并对它们进行 *** 作(包括数字 *** 作,所以很容易完成整列或统计计算)。
按我使用频率的顺序列出,附上评论。 有关更多详细信息,请尝试man command ,例如man grep命令行以获取更多详细信息。
grep – 匹配模式的打印行*我个人认为这是最有用的。
grep foo *.txt grep 192.168.1.1 output.log grep -i steve */*.txt
find – 遍历文件层次结构*可用于在子目录中查找文件或在文件上执行shell命令
find . -name lost.txt -print find . -name "*.txt" -print find . -type f -exec chmod 0644 {} ;
sed – 流编辑器*有助于自动化批量文件的简单文本编辑
sed "s/abc/ABC/" foo.txt
awk – 模式定向的扫描和处理语言*很久没有使用过了。 如果到了需要使用awk的地步,我通常会使用类似Ruby的东西。
总结以上是内存溢出为你收集整理的sed,grep,find,awk,gawk之间的关系是什么?全部内容,希望文章能够帮你解决sed,grep,find,awk,gawk之间的关系是什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)