我正在用bash编写脚本,我想知道是否还有其他方法可以编写这些sed命令(不使用sed):
sed '1,11d;$d' "${SOTTOCARTELLA}"/file
sed '1,11!d' "${SOTTOCARTELLA}"/file
sed '1,11d' -i "${SOTTOCARTELLA}"/file1
答案 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}"/file1
,head
或其他二进制文件,则可以使用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
,sed
,head
,tails
等的诞生是为了避免一遍又一遍地重写相同的例程,以及避免性能问题;这就是为什么包括我在内的每个人都将告诉您使用它们的原因。