Chr*_*rno 0 bash shell zsh sed
我试图将带有 sed 替换的文件传递给 sed,它忽略了我给它的部分路径:
首先,让我们从一个简单的断言开始:
test -f workdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/templates.sed && echo "exists"
exists
Run Code Online (Sandbox Code Playgroud)
是的,文件存在。现在,问题是:
sed -E -n -f /Users/cbongior/dev/omc/workdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/templates.sed /Users/cbongior/dev/omc/workdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/data.psv
sed: orkdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/templates.sed: No such file or directory
Run Code Online (Sandbox Code Playgroud)
它会丢弃oin之前的所有内容workdir!
我尝试过一个新的外壳,没有扩展
env -i /opt/brew/bin/bash
bash-5.2$ sed -n -E -f "/Users/cbongior/dev/omc/workdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/templates.sed" "/Users/cbongior/dev/omc/workdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/data.psv"
sed: orkdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/templates.sed: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我尝试过旧版本的 bash:
test -f workdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/templates.sed && echo "exists"
exists
Run Code Online (Sandbox Code Playgroud)
我已经尝试过zsh
sed -E -n -f /Users/cbongior/dev/omc/workdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/templates.sed /Users/cbongior/dev/omc/workdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/data.psv
sed: orkdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/templates.sed: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我也尝试过gsed
env -i /opt/brew/bin/bash
bash-5.2$ sed -n -E -f "/Users/cbongior/dev/omc/workdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/templates.sed" "/Users/cbongior/dev/omc/workdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/data.psv"
sed: orkdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/templates.sed: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我直接 cd 进入该文件的文件并删除所有路径:
env -i bash
The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
bash-3.2$ sed -n -E -f "/Users/cbongior/dev/omc/workdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/templates.sed" "/Users/cbongior/dev/omc/workdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/data.psv"
sed: orkdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/templates.sed: No such file or directory
Run Code Online (Sandbox Code Playgroud)
使用替换:
env -i zsh
sed -E -n -f /Users/cbongior/dev/omc/workdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/templates.sed /Users/cbongior/dev/omc/workdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/data.psv
sed: orkdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/templates.sed: No such file or directory
Run Code Online (Sandbox Code Playgroud)
尝试过这个:
bash-3.2$ cd $(dirname /Users/cbongior/dev/omc/workdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/templates.sed)
bash-3.2$ pwd
/Users/cbongior/dev/omc/workdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58
bash-3.2$ ls -al templates.sed data.psv
-rw-r--r-- 1 cbongior staff 1081134967 Aug 4 13:30 data.psv
-rwxrwxrwx 1 cbongior staff 62087 Aug 7 15:51 templates.sed
bash-3.2$ sed -E -n -f templates.sed data.psv
sed: orkdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/templates.sed: No such file or directory
Run Code Online (Sandbox Code Playgroud)
好吧,现在只是把事情搞砸了!
gsed -n -E -f "/Users/cbongior/dev/omc/workdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/templates.sed" "/Users/cbongior/dev/omc/workdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/data.psv"
gsed: couldn't open file orkdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/templates.sed: No such file or directory
Run Code Online (Sandbox Code Playgroud)
所以,如果我添加缺失的内容,w它就会忽略它。但如果我添加 2w就不会了?
这里我改变了arg顺序:
sed -E -n -f workdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/templates.sed workdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/data.psv
sed: orkdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/templates.sed: No such file or directory
Run Code Online (Sandbox Code Playgroud)
好的,最后一次尝试:如果这是一个 shell 问题,那么任何工具都有同样的困惑:
bash-5.2$ grep -E '.*' /Users/cbongior/dev/omc/workdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/templates.sed | wc -l
+ grep -E '.*' /Users/cbongior/dev/omc/workdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/templates.sed
+ wc -l
499
Run Code Online (Sandbox Code Playgroud)
我目前的猜测是(g)sed将其解释为某种开关,但我在文档中没有看到它,这是来自已经运行了一段时间的脚本的代码。
我怀疑这根本不是命令的问题,而是文件中某些内容的问题templates.sed。具体来说,我怀疑有一行像
workdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/templates.sed
Run Code Online (Sandbox Code Playgroud)
...它将sed解释为w命令(将模式空间写入文件),文件名为“orkdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59 -58/templates.sed”。这是一个快速演示:
$ cat demo.sed
workdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/templates.sed
$ sed -f demo.sed
sed: orkdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/templates.sed: No such file or directory
Run Code Online (Sandbox Code Playgroud)
尝试运行grep orkdir /Users/cbongior/dev/omc/workdir/2023-08-03/2023-07-21-01-30-19_2023-07-31-23-59-58/templates.sed并查看它显示的内容。
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |