相关疑难解决方法(0)

在MacOS上用sed替换逗号换行?

我有一个以逗号分隔的id文件.我正在尝试用新行替换逗号.我试过了:

sed 's/,/\n/g' file
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我错过了什么?

unix macos sed

264
推荐指数
8
解决办法
28万
查看次数

如何在图案前插入换行符?

不是如何在一行之前插入换行符.这是在询问如何在一行中的模式之前插入换行符.

例如,

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)

shell sed

125
推荐指数
7
解决办法
25万
查看次数

使用-i选项(就地编辑)的sed命令在Ubuntu上工作正常,但在Mac上工作正常

我对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)

linux macos bsd sed inplace-editing

95
推荐指数
4
解决办法
6万
查看次数

我需要我的sed -i命令进行就地编辑才能使用GNU sed和BSD/OSX sed

我有一个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正在砍掉一个角色,但我看不到解决方案.

macos gnu sed inplace-editing

59
推荐指数
6
解决办法
4万
查看次数

在sed中插入换行符(Mac OS X)

如何在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版本不同.

regex macos bash sed

40
推荐指数
5
解决办法
5万
查看次数

如何在使用sed的行之后插入换行符/换行符

我花了一段时间来弄清楚如何做到这一点,所以发布以防其他人正在寻找相同的.

bash shell zsh sed

28
推荐指数
3
解决办法
6万
查看次数

PCRE正则表达到SED

我正在尝试使用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.任何帮助都会很棒.

regex pcre sed

14
推荐指数
3
解决办法
2万
查看次数

用awk中的换行替换\n

我拖尾日志,他们输出\n而不是换行.

我想我应该管tailawk,做一个简单的替换,但我似乎无法逃脱正则表达式的换行符.在这里,我正在展示我的问题,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中很好用:

正则表达式在ST3工作

bash awk

11
推荐指数
6
解决办法
3万
查看次数

使用 BusyBox 工具解析 JSON

我正在开发一个可在 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字段值?

regex grep json cut busybox

5
推荐指数
1
解决办法
2187
查看次数

GNU sed 和 BSD sed 区别说明

我写了以下命令

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)

为什么会这样?

bsd gnu sed gnu-sed

5
推荐指数
1
解决办法
2532
查看次数

标签 统计

sed ×8

macos ×4

bash ×3

regex ×3

bsd ×2

gnu ×2

inplace-editing ×2

shell ×2

awk ×1

busybox ×1

cut ×1

gnu-sed ×1

grep ×1

json ×1

linux ×1

pcre ×1

unix ×1

zsh ×1