假设我写:
find . -regex "[0-9]{4}-[0-9]{2}-[0-9]{2}-(foo|bar).csv.gz" -printf "%f\n"
Run Code Online (Sandbox Code Playgroud)
这个命令在我看来应该可以工作。我已经遍历了各种 regextype 选项和各种 regex 格式,但是我无法让这种 regex 通过 find 工作。关于查找和正则表达式解析器,我在这里有什么简单的错误吗?
有没有awk
办法在路径上放置小脚本?
例如,我有一个非常有用的整理操作:
// collate-csv.awk
FNR > 1 || NR == 1
Run Code Online (Sandbox Code Playgroud)
我可以以各种很棒的方式使用它:
xargs -a $(find * -name *.csv) awk -F',' -f collate-csv.awk | ...
Run Code Online (Sandbox Code Playgroud)
唯一的问题是我无法从任何地方调用我的 awk 工具。使用可执行的 shell 脚本,我可以将其放入路径上的 bin 文件夹中。linux 中是否有一种机制可以让awk
我在文件系统中的任何地方都可以使用这些不可执行的源文件?
(有条件的是“机制”不是“你为什么不直接用锤子打它”式的kludge)
如何在 Mac 上获取现代 coreutils?
我使用以下方法遇到了这个问题csplit
:
foo.txt
:
foo
1
foo
2
foo
3
Run Code Online (Sandbox Code Playgroud)
$: csplit foo '^foo$' '{*}'
# error
Run Code Online (Sandbox Code Playgroud)
仔细检查Mac 上的manpage
, man csplit
,csplit
是 FreeBSD 版本,并且不提供该'{*}'
选项。事实上,我必须提前提供准确的分割次数。这要么会触发czplit
我重新实现,要么我可以GNU coreutils
在 mac 上登录。
有办法吗?
这是我经常输入的一个表达式,因为每个人都使用带头的 CSV 文件,我也必须出于我的目的传递标题:
cat foo.csv | awk -F',' 'BEGIN{start=0}{if(start==0){start = 1; print $0; next;} ...}'
Run Code Online (Sandbox Code Playgroud)
必须有一些微不足道的设置来允许标题通过,并避免创建 BASH 脚本包装器(并在我的大脑中拖曳它)或一遍又一遍地编写它。
有这样的设定吗?