或者更一般地说,如何从Bash环境变量中以冒号分隔的列表中删除项?
我想我多年前已经看到了一种简单的方法,使用更高级的Bash变量扩展形式,但如果是这样的话,我已经忘记了它.对谷歌的快速搜索出乎意料地少了几个相关结果,没有一个我称之为"简单"或"优雅".例如,分别使用sed和awk的两种方法:
PATH=$(echo $PATH | sed -e 's;:\?/home/user/bin;;' -e 's;/home/user/bin:\?;;')
PATH=!(awk -F: '{for(i=1;i<=NF;i++){if(!($i in a)){a[$i];printf s$i;s=":"}}}'<<<$PATH)
Run Code Online (Sandbox Code Playgroud)
什么都不直接存在?有什么类似于Bash中的split()函数吗?
更新:
看起来我需要为我的故意模糊的问题道歉; 我对解决特定用例的兴趣不如激发良好的讨论.幸运的是,我明白了!
这里有一些非常聪明的技巧.最后,我在工具箱中添加了以下三个功能.魔法发生在path_remove中,这主要基于Martin York巧妙使用awk的RS变量.
path_append () { path_remove $1; export PATH="$PATH:$1"; }
path_prepend () { path_remove $1; export PATH="$1:$PATH"; }
path_remove () { export PATH=`echo -n $PATH | awk -v RS=: -v ORS=: '$0 != "'$1'"' | sed 's/:$//'`; }
Run Code Online (Sandbox Code Playgroud)
唯一真正的缺点是使用sed去除尾部结肠.考虑到马丁的其他解决方案是多么简单,但我非常愿意接受它!
相关问题: 如何在shell脚本中操作$ PATH元素?
什么是mac shell脚本的sed命令将用myFile.txt的整个字符串内容替换字符串"fox"的所有迭代.
myFile.txt将是带有换行符和各种字符的html内容.一个例子是
</div>
</div>
<br>
<div id="container2">
<div class="question" onclick="javascript:show('answer2')";>
Run Code Online (Sandbox Code Playgroud)
谢谢!
编辑1
这是我的实际代码:
sed -i.bkp '/Q/{
s/Q//g
r /Users/ericbrotto/Desktop/question.txt
}' $file
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到:
sed in place editing only works for regular files.
Run Code Online (Sandbox Code Playgroud)
在我的文件中,Q被大量的中文字符(!)取代.离奇!
我正在开发一个 cypress 项目。我已经在 GitLab 中设置了管道。我的应用程序只能在通过 Open VPN 连接的专用网络上运行。
有人可以指导我如何将其添加到 .gitlab-ci.yml 文件中吗???
我的 .gitlab-ci.yml 是:
image: cypress/base:10
stages:
- test
test:
stage: test
script:
- npm install
- npm run test
Run Code Online (Sandbox Code Playgroud)
我的package.json如下:
{
"name": "cypresspackage",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"clean:reports": "rm -R -f cypress/reports && mkdir cypress/reports && mkdir cypress/reports/mochareports",
"pretest": "npm run clean:reports",
"scripts": "cypress run --spec cypress/integration/dummy.feature",
"combine-reports": "mochawesome-merge ./cypress/reports/mocha/*.json > cypress/reports/mochareports/report.json",
"generate-report": "marge cypress/reports/mochareports/report.json -f report -o cypress/reports/mochareports",
"report:copyScreenshots": "cp -r cypress/screenshots cypress/reports/mochareports/assets",
"posttest": …Run Code Online (Sandbox Code Playgroud) javascript openvpn gitlab-ci cypress cypress-cucumber-preprocessor
这是我编写的shell脚本的代码片段:
for src in $(find . -type f -maxdepth 1 \! -name ${deploy} \! -name gvimrc)
do
src=$(basename ${src})
dest="~/.${src}"
copy="${src} -> ${dest}"
cp $src $dest && echo -e "${ok} ${copy}" || echo -e "${fail} ${copy}"
done
Run Code Online (Sandbox Code Playgroud)
由于某种原因,cp无法执行.例如,在这种情况下$src='bashrc',我收到此错误:
cp: ~/.bashrc: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我不明白为什么会这样,不过,因为很明显,~/.bashrc就是目标,没有来源,因此cp不应该关心它是否存在与否.究竟出了什么问题?