Bash相当于sed命令

时间:2018-11-24 11:20:25

标签: bash

我正在用bash编写脚本,我想知道是否还有其他方法可以编写这些sed命令(不使用sed):

sed '1,11d;$d' "${SOTTOCARTELLA}"/file
sed '1,11!d' "${SOTTOCARTELLA}"/file
sed '1,11d' -i "${SOTTOCARTELLA}"/file1

1 个答案:

答案 0 :(得分:1)

使用y <- get(paste0("x", 1)) y[1,1] <- 10 assign(paste0("x", 1), y) ,您需要文件的前11行;

使用sed '1,11!d' "${SOTTOCARTELLA}"/file,您需要整个文件,但前11行除外。

如果您不想使用建议的sed '1,11d' -i "${SOTTOCARTELLA}"/file1head或其他二进制文件,则可以使用tail和一些支持变量来实现相同的选项。

例如,让我们尝试read。 您将需要一个起点和一个终点(当然还有文件)。

sed '1,11!d' "${SOTTOCARTELLA}"/file

请注意,这段代码可以做得更好(例如,在while条件下在计数器上添加控件),但这至少是您需要了解的两件事:

  • start=1 end=11 counter="$((start - 1))"; file="${SOTTOCARTELLA}/file" exec 3<"${file}" ### Create file descriptor 3 while IFS= read -r line <&3; do ### Read file line by line if [ "${counter}" -lt "${end}" ]; then ### If I'm in my "bundaries" printf "%s\n" "${line}" ### Print the line fi counter="$((counter + 1))" done exec 3>&- ### Close file descriptor 3 sedheadtails等的诞生是为了避免一遍又一遍地重写相同的例程,以及避免性能问题;这就是为什么包括我在内的每个人都将告诉您使用它们的原因。
  • 这种代码仅对可移植性问题有用,这就是为什么我以posix兼容的方式编写这段代码的原因。