我有一个以逗号分隔的id文件.我正在尝试用新行替换逗号.我试过了:
sed 's/,/\n/g' file
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我错过了什么?
不是如何在一行之前插入换行符.这是在询问如何在一行中的模式之前插入换行符.
例如,
sed 's/regex/&\n/g'
Run Code Online (Sandbox Code Playgroud)
将在正则表达式模式后插入换行符.
我怎么能在模式面前做同样的事情呢?
这是一个示例输入文件
some text (012)345-6789
Run Code Online (Sandbox Code Playgroud)
应该成为
some text
(012)345-6789
Run Code Online (Sandbox Code Playgroud) 我对Sed一无所知但是需要这个命令(在Ubuntu上运行正常)才能在Mac OSX上运行:
sed -i "/ $domain .*#drupalpro/d" /etc/hosts
Run Code Online (Sandbox Code Playgroud)
我越来越:
sed: 1: "/etc/hosts": extra characters at the end of h command
Run Code Online (Sandbox Code Playgroud) 我有一个makefile(在Linux上为gmake开发),我试图移植到OSX,但似乎sed不想合作.我所做的是使用GCC自动生成依赖文件,然后使用sed稍微调整一下.makefile的相关部分:
$(OBJ_DIR)/%.d: $(SRC_DIR)/%.cpp
$(CPPC) -MM -MD $< -o $@
sed -i 's|\(.*\)\.o:|$(OBJ_DIR)/\1.o $(OBJ_DIR)/\1.d $(TEST_OBJ_DIR)/\1_utest.o:|' $@
Run Code Online (Sandbox Code Playgroud)
虽然这在GNU/Linux下没有遇到麻烦,但在尝试构建OSX时会出现如下错误:
sed: 1: "test/obj/equipmentConta ...": undefined label 'est/obj/equipmentContainer_utest.d'
sed: 1: "test/obj/dice_utest.d": undefined label 'est/obj/dice_utest.d'
sed: 1: "test/obj/color-string_u ...": undefined label 'est/obj/color-string_utest.d'
Run Code Online (Sandbox Code Playgroud)
看起来sed正在砍掉一个角色,但我看不到解决方案.
如何在sed的替换部分插入换行符?
此代码无效:
sed "s/\(1234\)/\n\1/g" input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)
其中input.txt是:
test1234foo123bar1234
Run Code Online (Sandbox Code Playgroud)
和output.txt应该是:
test
1234foo123bar
1234
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个:
testn1234foo123barn1234
Run Code Online (Sandbox Code Playgroud)
注意:
这个问题具体是关于"sed"的Mac OS X版本,社区已经注意到它的行为与Linux版本不同.
我正在尝试使用PCRE正则表达式并在SED中使用它,但我遇到了一些问题.请注意,这个问题代表了一个更大的问题(如何将PCRE正则表达式转换为与SED一起使用)所以问题不仅仅是关于下面的示例,而是关于如何在SED正则表达式中使用PCRE正则表达式作为一个整体.
此示例从一行中提取电子邮件地址,并将其替换为"[emailaddr]".
echo "My email is abc@example.com" | sed -e 's/[a-zA-Z0-9]+[@][a-zA-Z0-9]+[\.][A-Za-z]{2,4}/[emailaddr]/g'
Run Code Online (Sandbox Code Playgroud)
我试过以下替换正则表达式:
([a-zA-Z0-9]+[@][a-zA-Z0-9]+[\.][A-Za-z]{2,4})
[a-zA-Z0-9]+[@][a-zA-Z0-9]+[\.][A-Za-z]{2,4}
([a-zA-Z0-9]+[@][a-zA-Z0-9]+[.][A-Za-z]{2,4})
[a-zA-Z0-9]+[@][a-zA-Z0-9]+[.][A-Za-z]{2,4}
Run Code Online (Sandbox Code Playgroud)
我已经尝试将sed的分隔符从s/find/replace/g更改为s | find | replace | g,如此处所述(堆栈溢出:pcre regex到sed regex).
我仍然无法弄清楚如何在SED中使用PCRE正则表达式,或者如何将PCRE正则表达式转换为SED.任何帮助都会很棒.
我拖尾日志,他们输出\n而不是换行.
我想我应该管tail到awk,做一个简单的替换,但我似乎无法逃脱正则表达式的换行符.在这里,我正在展示我的问题,cat而不是tail:
// test.txt
John\nDoe
Sara\nConnor
cat test.txt | awk -F'\\n' '{ print $1 "\n" $2 }'
Run Code Online (Sandbox Code Playgroud)
期望的输出:
John
Doe
Sara
Connor
Run Code Online (Sandbox Code Playgroud)
实际产量:
John\nDoe
<- there is a newline here
Sara\nConnor
<- there is a newline here
Run Code Online (Sandbox Code Playgroud)
所以它看起来与test.txt中的名字和姓氏\\n不匹配,\n而是每行末尾的换行符.
它看起来\\n不是在终端中逃脱的正确方法吗?这种转义方式在Sublime Text中很好用:

我正在开发一个可在 Android 上安装的 Hugo 博客主题(通过 Termux 的 BusyBox),并计划创建一个 BusyBox Docker 映像,并将我的主题和 Hugo 二进制文件复制到其中,以便在 ARM 上使用。
主题版本已存档并可在 NPM 上使用,而BusyBox 上提供的工具使我能够可靠地解析versionJSON 中的元数据:
meta=$(wget -qO - https://registry.npmjs.org/package/latest)
vers=$(echo "$meta" | egrep -o "\"version\".*[^,]*," | cut -d ',' -f1 | cut -d ':' -f2 | tr -d '" ')
Run Code Online (Sandbox Code Playgroud)
现在我想将dist值从复制meta到文本文件中以在 Hugo 中使用:
"dist": {
"integrity": "sha512-3MH2/UKYPjr+CTC85hWGg/N3GZmSlgBWXzdXHroDfJRnEmcBKkvt1oiadN8gzCCppqCQhwtmengZzg0imm1mtg==",
"shasum": "a159699b1c5fb006a84457fcdf0eb98d72c2eb75",
"tarball": "https://registry.npmjs.org/after-dark/-/after-dark-6.4.1.tgz",
"fileCount": 98,
"unpackedSize": 5338189
},
Run Code Online (Sandbox Code Playgroud)
为了清晰起见,上面印刷得很漂亮。实际的元数据是压缩的。
有没有办法可以重用version上面的解析逻辑来提取dist字段值?
我写了以下命令
echo -en 'uno\ndue\n' | sed -E 's/^.*(uno|$)/\1/'
Run Code Online (Sandbox Code Playgroud)
期待以下输出
uno
Run Code Online (Sandbox Code Playgroud)
我的 GNU Sed 4.8 确实就是这种情况。
但是,我已经验证 BSD Sed 输出
Run Code Online (Sandbox Code Playgroud)
为什么会这样?