Shell命令与awk,sed等价操作整理

需积分: 9 5 下载量 100 浏览量 更新于2024-11-17 收藏 3KB TXT 举报
本文主要探讨了在Shell脚本中,一些常见的命令如`cat`, `tac`, `grep`, `head`, `tail`, `cut`, `tr`, `wc`, `uniq`, `rev`, `basename`, `dirname`, `xargs`, `paste`, `cat -n`, `grep -n`, `cp`, `mv`, `echo`以及它们与`awk`和`sed`命令的等价用法。通过理解这些等价表达,可以灵活地在不同场景下选择合适的工具来处理文本数据。 1. `cat`与`awk`: - `cat`用于连接文件并打印到标准输出。 - 等价的`awk`命令是:`awk '{print}'` 2. `cat -s`与`sed`: - `cat -s`压缩连续的空白行。 - 等价的`sed`命令是:`sed '/./,/^$/!d'` 3. `tac`与`sed`: - `tac`反向显示文件内容。 - 等价的`sed`命令是:`tac|sed '1!G;h;$!d'` 4. `grep`与`sed`: - `grep patt`查找包含模式`patt`的行。 - 等价的`sed`命令是:`grep patt|sed '/patt/!d'` - `grep -v patt`查找不包含模式`patt`的行。 - 等价的`sed`命令是:`grep -v patt|sed '/patt/d'` 5. `head`与`sed`: - `head`显示文件的前10行。 - 等价的`sed`命令是:`head|sed '10q'`或`head -1|sed 'q'` 6. `tail`与`sed`: - `tail`显示文件的末尾10行。 - 等价的`sed`命令是:`tail|sed -e ':a' -e '$q;N;11,$D;ba'`或`tail -1|sed '$!d'` - `tail -f`持续监控文件的尾部。 - 等价的`sed`命令是:`tail -f|sed -u '/./!d'` 7. `cut`与`sed`: - `cut -c10`显示每行的第10个字符。 - 等价的`sed`命令是:`cut -c10|sed 's/\(.\)\{10\}.*/\1/'` - `cut -d: -f4`按冒号分隔,显示第4字段。 - 等价的`sed`命令是:`cut -d: -f4|sed 's/\(\([^:]*\):\)\{4\}.*/\2/'` 8. `tr`与`sed`: - `tr 'A-Za-z' 'a-zA-Z'`将小写字母转换为大写,反之亦然。 - 等价的`sed`命令是:`tr A-Za-z|sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` 或 `tr a-zA-Z|sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` - `tr -s ''`删除连续重复的字符。 - 等价的`sed`命令是:`tr -s ''|sed 's/\+//g'` - `tr -d '\012'`删除所有换行符。 - 等价的`sed`命令是:`tr -d '\012'|sed 'H;$!d;g;s/\n//g'` 9. `wc -l`与`sed`: - `wc -l`计算文件中的行数。 - 等价的`sed`命令是:`wc -l|sed -n '$='` 10. `uniq`与`sed`: - `uniq`去除连续重复的行。 - 等价的`sed`命令是:`uniq|sed 'N;/^\(.*\)\n\1$/!P;D'` 11. `rev`与`sed`: - `rev`反转每行的字符顺序。 - 等价的`sed`命令是:`rev|sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'` 12. `basename`与`sed`: - `basename`提取路径中的文件名。 - 等价的`sed`命令是:`basename|sed 's,.*/,,'` 13. `dirname`与`sed`: - `dirname`提取路径中的目录部分。 - 等价的`sed`命令是:`dirname|sed 's,[^/]*$,,'` 14. `xargs`与`sed`: - `xargs`将标准输入转换为命令行参数。 - 等价的`sed`命令是:`xargs|sed -e ':a' -e '$!N;s/\n//;ta'` 15. `paste`与`sed`: - `paste -s -d:`合并多行,并在每行间用冒号分隔。 - 等价的`sed`命令是:`paste -s -d:|sed -e ':a' -e '$!N;s/\n/:/;ta'` 16. `cat -n`与`sed`: - `cat -n`显示行号。 - 等价的`sed`命令是:`cat -n|sed '='|sed '$!N;s/\n//'` 17. `grep -n`与`sed`: - `grep -n patt`查找模式`patt`并在行前显示行号。 - 等价的`sed`命令是:`grep -n patt|sed -n '/patt/{=;p;}'|sed '$!N;s/\n/:/'` 18. `cp orig new`与`sed`: - `cp orig new`复制`orig`文件到`new`文件。 - 等价的`sed`命令是:`sed 'wnew' orig` 19. `mv old new`与`sed`: - `mv old new`移动或重命名文件。 - 在某些情况下,可以使用`sed`进行临时处理,但不能直接实现移动功能,因为`sed`不会改变原文件。 20. `echo`与`awk`: - `echo`输出字符串。 - 在某些简单情况下,`awk`也可以用来输出字符串,例如:`echo 'text'` 可以用 `awk '{print "text"}'` 替代。 通过掌握这些等价命令,可以更灵活地在Shell脚本中处理文本数据,根据实际需求选择最适用的工具。理解这些转换可以帮助提高脚本的效率和可读性。