• 尴尬和SED有什么区别?
  • 哪种应用是SED和尴尬工具的最佳用例?
有帮助吗?

解决方案

sed 是一个流编辑器。它以每行为基础处理字符流。它有一种原始的编程语言,包括 goto 式循环和简单的条件(除了模式匹配和地址匹配之外)。本质上只有两个“变量”:模式空间和保持空间。脚本的可读性可能很困难。数学运算充其量是极其尴尬的。

有各种版本 sed 对命令行选项和语言功能提供不同级别的支持。

awk 面向每行的分隔字段。它具有更强大的编程结构,包括 if/else, while, do/whilefor (C 风格和数组迭代)。完全支持变量和一维关联数组以及 (IMO) 复杂的多维数组。数学运算类似于 C 中的数学运算。它有 printf 和功能。“AWK”中的“K”代表“Kernighan”正如《C 编程语言》一书的“Kernighan 和 Ritchie”中那样成名(不要忘记 A何和 艾因伯格)。人们可以想象使用以下方法编写一个学术剽窃检测器 awk.

GNU awk (gawk)有许多扩展,包括最新版本中的真正的多维数组。还有其他变体 awk 包括 mawknawk.

这两个程序都使用正则表达式来选择和处理文本。

我倾向于使用 sed 文本中有模式的地方。例如,您可以替换某些文本中“减号后跟数字序列”形式的所有负数(例如“-231.45”),采用“会计师括号”形式(例如“(231.45)”)使用这个(有改进的空间):

sed 's/-\([0-9.]\+\)/(\1)/g' inputfile

我会用 awk 当文本看起来更像行和列时,或者像 awk 指的是“记录”和“字段”。如果我要执行与上面类似的操作,但仅在简单的逗号分隔文件中的第三个字段上,我可能会执行以下操作:

awk -F, 'BEGIN {OFS = ","} {gsub("-([0-9.]+)", "(" substr($3, 2) ")", $3); print}' inputfile

当然,这些只是非常简单的示例,并没有说明每个示例必须提供的全部功能。

其他提示

1)awk 和 sed 有什么区别?

两者都是转换文本的工具。但是 awk 除了操作文本之外还可以做更多的事情。它本身就是一种编程语言,包含您在编程中学到的大部分内容,例如数组、循环、if/else 流程控制等您也可以在 sed 中“编程”,但您不想维护用它编写的代码。

2) sed 和 awk 工具的最佳用例是什么类型的应用程序?

结论:使用 sed 进行非常简单的文本解析。除此之外,awk 更好。事实上,您可以完全放弃 sed,只使用 awk。由于它们的功能重叠,并且 awk 可以做更多事情,因此只需使用 awk 即可。您也将减少您的学习曲线。

这两种工具都旨在处理文本,并且这两种工具都可以用于执行某些任务。

对我来说,区分它们的规则是:使用 sed 要自动执行您需要在文本编辑器中手动执行的任务。这就是为什么它被称为流 编辑. 。(您可以使用相同的命令在 vim 中编辑文本)。使用 awk 如果您想分析文本,即计算字段、计算总数、提取和重组结构等。

另外你不应该忘记 grep. 。使用 grep 如果您只想搜索/提取文本(文件)中的内容

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top