【发布时间】:2019-05-30 08:33:24
【问题描述】:
我正在寻找一种方法来删除管道文本的缩进。下面是使用cut -c 9- 的解决方案,它假定缩进为 8 个字符宽。
我正在寻找一种可以检测要删除的空格数的解决方案。这意味着遍历整个(管道)文件以了解用于缩进它的最小空格数(制表符?),然后在每一行删除它们。
运行.sh
help() {
awk '
/esac/{b=0}
b
/case "\$arg" in/{b=1}' \
"$me" \
| cut -c 9-
}
while [[ $# -ge 1 ]]
do
arg="$1"
shift
case "$arg" in
help|h|?|--help|-h|'-?')
# Show this help
help;;
esac
done
$ ./run.sh --help
help|h|?|--help|-h|'-?')
# Show this help
help;;
注意:echo $' 4\n 2\n 3' | python3 -c 'import sys; import textwrap as tw; print(tw.dedent(sys.stdin.read()), end="")' 有效,但我希望有更好的方法(我的意思是,它不仅依赖于比 python 更常见的软件。也许是 awk?我也不介意看到 perl 解决方案。
注意 2:echo $' 4\n 2\n 3' | python -c 'import sys; import textwrap as tw; print tw.dedent(sys.stdin.read()),' 也可以使用 (Python 2.7.15rc1)。
【问题讨论】:
-
请将该示例输入的所需输出添加到您的问题中。
-
问题不清楚,您在 help() 中尝试做的事情的目标并不明显。您会看到哪些可能的输入?如果您只想删除前导空格,
| sed -e 's/^[[:space:]]+//'之类的应该可以工作。 -
@JeffBreadner:我建议将
-e替换为-E或将+替换为\+。 -
您关心制表符的处理,还是我们只是在这里计算空白字节数?
-
旁白:可以阅读以解决“请以尽可能多的语言实现 X”的内容通常在这里不受欢迎。问题应该是具体的、about actual problems you face,并且绝对不是开放式的。一旦有了满足您需求的实现,您就不再面临实际问题。想要放弃 Python 依赖以仅使用基线 UNIX 工具(如 awk,所以 dawg 的答案是一个很好的工具)运行是一个公平的“实际问题”。不是出于好奇而想看到更多替代实现。